проблема структуры отношения один-ко-многим 4.1 mvc - PullRequest
1 голос
/ 10 августа 2011

у меня есть эти модели:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Books> FavoriteBooks { get; set; }
}

public class Books
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author{ get; set; }
}

Когда я запускаю DBContext и проверяю сгенерированные таблицы, в таблице Книги создан столбец Student_Id. Я хочу, чтобы таблица «Книги» была просто справочной и не была связана со студентом. Как я могу сделать эти отношения однонаправленными, и в Книге не будет создан столбец Student_Id? Могу ли я использовать Fluent-API? или только в простых аннотациях данных?

спасибо

1 Ответ

3 голосов
/ 10 августа 2011

В свободном API это должно выглядеть примерно так:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>()
                .HasMany(s => s.FavoriteBooks)
                .WithMany();
}

Это создаст таблицу «StudentBooks», чтобы вы могли поддерживать отношения «многие ко многим». Как показывает ваш вопрос, это не отношения один ко многим, поскольку у студента может быть много любимых книг, но каждая книга может быть любимой многими студентами.

Обновление

Ради полноты, вот как вы это сделаете, если у вас уже есть определенная таблица связывания и вам нужно сообщить EF, как выглядит отображение:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>()
                .HasMany(s => s.FavoriteBooks)
                .WithMany();
                .Map(cfg => cfg.MapLeftKey("Student_Id")
                               .MapRightKey("Books_Id")
                               .ToTable("StudentBooks"));
}
...