2012-08-08 2 views
4

내가 표준의 ASP .NET 멤버 자격 공급자를 통해 추가 사용자 정보를 저장하기 위해 노력하고 .NET mvc3데이터베이스를 삭제할 수 없습니다 + EF 코드 첫번째

에게 ASP에 새로운 오전. 나는 새로운 엔티티 UserAddress를 만들었고 멤버쉽 API를 사용하여 aspnet_tables와 동기화했다.

그러나 이제 UserAddress 클래스를 변경하면 asp.net이 모델을 삭제하고 다시 작성하지 않습니다. 오류가 발생합니다.

데이터베이스가 사용 중이기 때문에 삭제할 수 없습니다.

나는 stackoverflow와 (과) google을 검색했습니다. 나는에 대한 회원 메소드를 호출했기 때문에

"이것은 나에게 무슨 일이 일어 : 기본적으로, 내 문제는 내가 크리스 솔루션으로 제안 무엇을 구현하는 방법을 잘 모르겠습니다, 그러나이

Database in use error with Entity Framework 4 Code First

유사하다 DB와 충돌이 발생했습니다. 회원 시스템을 사용하기 전에 이니셜 라이저를 실행하고 시드하여 강제로 해결했습니다. "

내 코드가 데이터 저장소의이 지점 :

var userid = Membership.GetUser.ProviderUserKey.ToString(); 
return db.UserAddress.SingleOrDefault(a => a.UserId == userid); 

회원 시스템 이전에 이니셜 라이저를 강제 실행하려면 어떻게해야합니까? 스 니펫 내 코드의

은 다음과 같습니다 :

public class UserAddress 
{ 
    public int UserAddressId { get; set; } 
    public string UserId { get; set; } 
    public string FlatNo { get; set; } 
    public string BuildingName { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string PostCode { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 
    public long MobilePhone { get; set; } 
} 

public class NPLHWebsiteDb : DbContext 
{ 
    public DbSet<UserAddress> UserAddress { get; set; } 
} 

public class NPLHWebsiteInitializer : DropCreateDatabaseIfModelChanges<NPLHWebsiteDb> 
    { 
     protected override void Seed(NPLHWebsiteDb context) 
     { 
      var userAddress = new List<UserAddress> 
      { 
       new UserAddress { 
        UserAddressId = 1, 
        UserId = "153", 
        FlatNo = "6.4", 
        BuildingName = "Wilton Plaza", 
        MobilePhone = 9810110123, 
       } 
      }; 
      userAddress.ForEach(a => context.UserAddress.Add(a)); 
      context.SaveChanges(); 
    } 

감사

답변

4

범인은 '멤버십'으로 추정됩니다.

코드는 로그인 한 사용자의 주소를 찾기 위해 구성원 자격을 사용합니다. 따라서 웹 사이트에 로그인하면 멤버쉽 테이블이 호출되고 SQL은 인니 타이 저가 테이블을 삭제하고 현재 테이블을 다시 생성하는 것을 허용하지 않습니다 (멤버쉽 별).이 크리스 내가

기본적으로 내 원래의 질문에 연결 한 스택 오버플로 문제의 지적 정확히 무엇

,이 솔루션은 회원이 호출되기 전에 initalize하기 위해 데이터베이스를 강제하는 것이었다. 어떻게해야할지 모르겠다. 수동으로 URL을 입력하여 사용자 주소 페이지에 액세스하려고했습니다. 그러나 멤버쉽 테이블을 호출하는 라인에서 다시 실패 했으므로 작동하지 않았습니다.

System.Data.Entity.Database.SetInitializer(new MyInitializer());   
MyContext db = new MyContext();   
db.Database.Initialize(true); 
+6

나는' db.Database.Initialize (true);'대신에. – mpen

0

당신이 그렇게 그 첫 번째 일이 일이 당신의 Global.asax에 위해 Application_Start()에 이니셜이 있습니까?

protected void Application_Start() { 
    Database.SetInitializer(new NPLHWebsiteInitializer()); 
} 
+0

이 방법은 http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-new-field에서 권장하는 방법과 비슷합니다. 이 자습서를 끝내 겠지만 SQL Server 2008 (.sdf 데이터베이스 파일이 아닌)을 사용하기로 결정했습니다. 그러나 SQL Server 연결 (Windows 인증)에서는 작동하지 않습니다. Tripping의 솔루션이 저에게 효과적이었습니다. 내 요점은 사용 된 연결 유형과 회원 문제가 관련되어있는 것 같습니다. –

0

return db.UserAddress.SingleOrDefault(a => a.UserId == userid); 모습 컨트롤러를 무엇.

내가 시도 할 것 "return db.UserAddress.SingleOrDefault(a => a.UserId == userid).ToList()"

그리고 문제를 해결하는 그것을 참조하십시오.

+0

작동하지 않습니다. 나는 그 일을 시도했지만이 ToList의 확장은 허용되지 않습니다. – Tripping

7

SQL Server Management Studio를 사용하여 SqlExpress 데이터베이스에 연결하고 프로젝트를 시작할 때 몇 가지 쿼리를 열어 본 적이 있기 전에이 문제가 발생했습니다.

이 작업을 수행하는 경우 프로젝트를 시작하기 전에 SSMS에서 데이터베이스 연결을 해제하십시오.

+0

안녕하세요 StanK, 저는 방금 시각적 웹 개발자를 사용하고 있습니다. 컴퓨터를 다시 시작하고 시각적 웹 개발자를 통해 프로젝트를 시작하더라도이 문제가 계속 발생합니다. – Tripping

+0

Perfect -이 작업은 저에게 맞았습니다 (EF 5.0) –

0

를 내가 엔티티 프레임 먼저 MVC 4 코드를 사용하고 다음과 같이

이 작업을 수행하는 올바른 방법은 응용 프로그램 시작의 초기화를 강제하는 것이었다. 회원 자격을 다른 데이터베이스로 이동하고 Trpping 코드를 Application_Start()에 추가하고 SSMS를 사용하지 않고 코드를 시작 방법의 시작 부분으로 옮겼습니다. Mark와 마찬가지로 여전히 오류가 발생했습니다 (다른 점).

https://stackoverflow.com/a/7007818/2332919에 의해 해결되어 내 연결 문자열에 Pooling=false을 추가하면 어느 정도의 비용이 소요됩니까?

+1

이 질문에 대한 답변입니까, 아니면 질문입니까? – Stewie

관련 문제