2012-06-08 3 views
2

간단한 MVC3 응용 프로그램에서 EF4 코드를 먼저 사용하고 있습니다. OnModelCreating 메서드와 마찬가지로 컨텍스트 개체에서 올바른 연결 문자열을 가져오고 이니셜 라이저 생성자가 호출되지만 시드 메서드는 호출되지 않으며 데이터베이스가 만들어지지 않습니다. 어떤 아이디어?Entity Framework 데이터베이스가 만들어지지 않습니다.

protected void Application_Start() 
{ 
    Database.SetInitializer<SchoolContext>(new SchoolInitializer()); 
    SchoolContext context = new SchoolContext(); 
    context.Database.CreateIfNotExists(); 
    ... 
} 

public class SchoolInitializer : DropCreateDatabaseAlways<SchoolContext> 
{ 
    public SchoolInitializer() 
    { 
    } 
    protected override void Seed(SchoolContext context) 
    { 
     var students = new List<Student> 
     { 
      new Student {StudentId = Guid.NewGuid(), Name = "Carson" }, 
      new Student {StudentId = Guid.NewGuid(), Name = "Meredith" } 
     }; 
     students.ForEach(s => context.Students.Add(s)); 
     context.SaveChanges(); 
    } 
} 

public class Student 
{ 
    [Key] 
    public Guid StudentId; 
    public string Name; 
} 

public class SchoolContext : DbContext 
{ 
    public DbSet<Student> Students { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
} 

구성 :

<connectionStrings> 
    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 

난 그냥 데이터베이스가 생성되지 않았 음을 불평 생각 던져 예외 :

[ModelValidationException : 하나 이상의 유효성 검사 오류가 모델 중에 검출되었다 생성 :

.Data.Edm.EdmEntityType :: EntityType '학생'에 키가 정의되어 있지 않습니다. 이 EntityType의 키를 정의하십시오. System.Data.Edm.EdmEntitySet : EntityType : EntitySet Students keys는 정의 된 키가없는 Student type 유형을 기반으로합니다.

+1

학생용으로 PK를 정의해야합니다. 나는 당신이 당신의 모델들 사이에 관계가 있다고 가정하고 있습니다. 또한 명확하게 "ModelValidationException"이 아닌 "DatabaseValidationException"이 표시됩니다. IT는 데이터베이스 문제가 아니라 모델 문제입니다. –

+0

EF를 일반 데이터베이스 대신 sdf 파일과 함께 사용 하시겠습니까? – abatishchev

답변

4

모델이 유효하지 않습니다. - Student 엔티티는 키가 정의되어 있지 않으며 모델이 유효 할 때까지 데이터베이스 생성이 트리거되지 않습니다.

StudentId에 접근자를 추가해야합니다. 이렇게하면 모델이 유효하고 데이터베이스 생성이 트리거됩니다.

public Guid StudentId { get; set; } 
+0

{한} 가장 단순한 것 .... 많은 감사합니다 archil. – simon831

+0

@ simon831 오신 것을 환영합니다. – archil

관련 문제