Странная схема базы данных, созданная сначала кодом ef 4.1 - PullRequest
1 голос
/ 05 июля 2011

У меня есть модель, которая выглядит следующим образом (ну, не совсем, но у нее та же проблема)

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 поддерживает свойство навигации «Родитель», но почему столбец Book_Id?

Примечание. Я использую Entity Framework версии 4.1.10331.0

.

1 Ответ

4 голосов
/ 05 июля 2011

Вы должны сообщить 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);
    }
}
...