2011-07-05 57 views
1

我有一個模型,看起來像這樣(當然不是真的,但它有同樣的問題)古怪的數據庫模式

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) 

無w解決我的問題:我無法理解爲什麼它會從章節到書籍生成兩個外鍵。 Parent_Id-column似乎很明顯支持導航屬性「Parent」,但是爲什麼Book_Id-column?

注:我使用實體框架版本4.1.10331.0

回答

4

你需要告訴了Parent屬性對應於​​收集EF:

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); 
    } 
}