Я нахожусь в ситуации, когда у меня есть таблица с именем Elements
. Теперь я создаю таблицу с именем Divergences
, в которой будут храниться пары Elements
. Цель Divergence
состоит в том, чтобы проверить, есть ли у двух Elements
расходящиеся ответы.
Element Divergence
--------- ----------
ElementId ElementId1
ElementId2
В приведенной выше схеме таблицы ElementId1
и ElementId2
являются внешними ключами, сопоставленными с ElementId
в таблице Elements
, и формируют составной первичный ключ для таблицы Divergence
.
Я использую подход Database First, где я создаю таблицы в SQL Server Management Studio, а затем делаю Update Model from Database...
в Entity Framework Designer.
Проблема, с которой я столкнулся, заключается в том, что когда EF Designer генерирует модель, он создает 2 набора ICollection<Element>
внутри класса Element
, а именно Elements
и Elements1
.
Это не дает мне Divergences
DbSet.
То, что я хотел бы иметь, это класс Divergence
, где я бы сделал что-то вроде этого в коде:
Divergence d = new Divergence();
d.Element1 = element1;
d.Element2 = element2;
Database.Divergences.Add(d);
Database.SaveChanges();
и позже:
Element e = Database.Elements.Single(e => e.ElementId == 7);
var divergences = e.Divergences;
Я попытался добавить новый столбец в таблицу Divergence
следующим образом:
Element Divergence
--------- ------------
ElementId DivergenceId
ElementId1
ElementId2
Это правильно приводит к отношению 1 <-> *
в Entity Framework Designer. В конце концов я получаю Divergences
DbSet, но свойство DivergenceId
бесполезно в коде, и я все еще получаю 2 набора в классе Element
. Важно отметить, что ElementId1
и ElementId2
по-прежнему образуют составной первичный ключ.
Как вы думаете, как правильно изобразить эту конкретную ситуацию? Спасибо за отзыв.