У меня замешательство за столом присоединения - PullRequest
2 голосов
/ 20 июня 2011

Итак, сначала я работаю над кодом Entity Framework. Я довольно новичок в реляционном отображении базы данных в целом. Я создал общий пример для своего вопроса, код которого я опубликую ниже.

Сценарий - это простой опрос на форуме. Пользователь может голосовать в опросе, выбрав опцию (или, возможно, несколько опций опроса).

Опрос и Опция имеют отношение один ко многим. Опция и Пользователь имеют отношение многие ко многим. Опрос и Пользователь имеют отношение многие ко многим.

Но пользователи, которые есть в опросе, будут в основном составлены из пользователей, у которых есть опции, так как для голосования по опциону вы должны голосовать в опросе и наоборот. Так что, в принципе, я думаю, что это можно описать как таблицу соединений пользователя / параметров с привязанными к ним первичными ключами опросов. Или это может быть что-то вроде таблицы соединения User / Poll с Option как массив сложных типов или что-то в этом роде.

В любом случае, я работал с Fluent API (DbModelBuilder), но мне еще не пришло то, что я ищу. Помощь

Poll.cs

public class Poll
{
  public long ID { get; private set; }
  public ICollection<Option> Options { get; set; }
  public ICollection<User> Users { get; set; }
}

Option.cs

public class Option
{
  public long ID { get; private set; }
  public long PollID { get; set; }
  public ICollection<User> Users { get; set; }
}

User.cs

public class User    {
  public long ID { get; private set; }
  public ICollection<Option> Polls { get; set; }
  public ICollection<User> Options { get; set; }
{

1 Ответ

2 голосов
/ 20 июня 2011

Зачем вам нужно соединение между Poll и User?Это избыточная информация - вы всегда можете получить эти данные по запросу через Options.Если вы действительно хотите, введите четвертую сущность с именем Vote, которая будет содержать PollId, UserId и OptionId.Ваша логика приложения должна гарантировать, что используются правильные комбинации OptionId и PollId.Другим способом решения этой проблемы является создание составного ключа в Option, состоящего из OptionId и PollId.Тогда вы создадите связь «многие ко многим» между User и Option.Это частично решит потребности пользователя в зависимости от опроса и полностью устранит проблемы с проверкой допустимых пар OptionId и PollId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...