首先由ef 4.1代码创建的奇怪的数据库模式

时间:2011-07-05 18:14:24

标签: entity-framework entity-framework-4.1 ef-code-first

我有一个看起来像这样的模型(不是真的,但它有同样的问题)

public class Book
{
    public int Id { get; set; }
    public ICollection<Chapter> Chapters { get; set; }
    public Chapter FirstUnreadChapter { get; set; }
}
public class Chapter
{
    public int Id { get; set; }
    public Book Parent { get; set; }
}

像这样的容器:

   public class BookContext : DbContext
    {
        public DbSet<Chapter> Chapters { get; set; }
        public DbSet<Book> Books { get; set; }
    }

现在让它在sql server express中创建一个数据库,生成以下数据库表:

CREATE TABLE [dbo].[Books](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FirstUnreadChapter_Id] [int] NULL)
CREATE TABLE [dbo].[Chapters](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Book_Id] [int] NULL,
    [Parent_Id] [int] NULL)

现在我的问题:我无法理解为什么它会从章节到书籍生成两个外键。 Parent_Id列显然支持导航属性“Parent”,但为什么Book_Id-column?

注意:我正在使用Entity Framework 4.1.10331.0版

1 个答案:

答案 0 :(得分:4)

您需要告诉EF Parent属性对应Chapters集合:

public class BookContext : DbContext
{
    public DbSet<Chapter> Chapters { get; set; }
    public DbSet<Book> Books { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Book>()
                    .HasMany(x => x.Chapters)
                    .WithRequired(x => x.Parent);
    }
}