2014-01-14 3 views
1

Я начинаю новый проект ASP.Net MVC 5 и использую EF5 и Code First вместе с ним. Поскольку я новичок в EF, я пытаюсь выяснить, как настроить отношения между двумя классами, чтобы он работал так, как я хочу.Entity Framework Отношение «один ко многим» с заказом

Я моделирую «тест». Существует класс Test и класс Questions. Пользователь создает тест, добавляя один или несколько вопросов и задавая порядок вопросов. Таким образом, у нас есть не только отношения «один ко многим» между тестом и вопросом, но и ручной порядок этих вопросов для данного теста (вопросы исходят из общего пула, и учителя могут создавать свои индивидуальные тесты из этого пула, но заказывать вопросы, как они хотят),

Я понимаю, как получить нормальное, базовое отношение «один ко многим» в EF. Но как обрабатывать порядок в рамках этих отношений? Я просто создаю свой собственный класс «linking» вместо того, чтобы позволить EF строить таблицу ссылок для меня? Могу ли я настроить что-то в Data Annotations или Fluent API для выполнения этой работы (я использовал DA, а не Fluent, но был бы готов использовать его, если это поможет).

ответ

1

Если разные пользователи могут использовать одинаковые вопросы в другом порядке, то вы должны создать таблицу привязки между тестом и вопросами, которые будут содержать вопрос о порядке. Что-то вроде этого:

public class Test 
{ 
    // ... 
    public virtual ICollection<TestQuestion> Questions { get; set; } 
} 

public class TestQuestion 
{ 
    public virtual Test Test { get; set; } 
    public virtual Question Question { get; set; } 
    public int Order { get; set; } 
} 

public class Question 
{ 
    // ... 
} 

И отображение будет выглядеть следующим образом:

modelBuilder.Entity<Test>() 
      .HasMany(t => t.Questions) 
      .WithRequired(tq => tq.Test); 

modelBuilder.Entity<TestQuestion>() 
      .HasRequired(tq => tq.Question) 
      .WithOptional(); 
Смежные вопросы