我有一个看起来像这样的模型(不是真的,但它有同样的问题)
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版
答案 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);
}
}