2

単純な MVC3 アプリケーション内で最初に EF4 コードを使用しています。正しい接続文字列がコンテキスト オブジェクトによって取得され、OnModelCreating メソッドと同様に初期化子コンストラクターが呼び出されますが、シード メソッドは呼び出されず、データベースは作成されません。理由はありますか?

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: モデル生成中に 1 つ以上の検証エラーが検出されました:

.Data.Edm.EdmEntityType: : EntityType 'Student' にはキーが定義されていません。この EntityType のキーを定義します。System.Data.Edm.EdmEntitySet: EntityType: EntitySet "Students" は、キーが定義されていないタイプ "Student" に基づいています。

4

1 に答える 1

4

モデルが無効です-Studentエンティティにはキーが定義されておらず、モデルが有効になるまでデータベースの作成はトリガーされません。

にアクセサを追加する必要がありますStudentId。これにより、モデルが有効になり、データベースの作成がトリガーされます

public Guid StudentId { get; set; }
于 2012-06-08T14:03:50.523 に答える