Невозможно определить такое отображение.Соединительные таблицы предназначены только для отношений «многие ко многим».Вы должны иметь в виду, что ваша схема базы данных (которую вы не можете изменить, как вы сказали в комментариях к вашему вопросу) уже определяет отношение многие ко многим.Например, эти две записи ...
ParentTable_ID: 1 2
ChildTable_ID: 1 1
... являются действительными записями в таблице ParentChildren
, они не нарушают ограничение PK и говорят, что у ребенка 1 есть два родителя 1 и2.
Если ваша бизнес-логика допускает, что у ребенка может быть только один единственный родитель, схема базы данных смоделирована неправильно.Вы не можете исправить этот недостаток с помощью EF.
Возможный обходной путь может заключаться в том, чтобы обеспечить в вашей бизнес-логике в коде, что коллекция ParentTables
вашей сущности ChildTable
никогда не имеет более одного элемента, возможно, путем введениявспомогательное свойство, не отображенное на карту:
public class ChildTable
{
public ChildTable()
{
this.ParentTables = new List<ParentTable>();
}
public int ID { get; set; }
public int Relation { get; set; }
public virtual ICollection<ParentTable> ParentTables { get; set; }
[NotMapped] // or use .Ignore(c => c.ParentTable) in Fluent API
public ParentTable ParentTable
{
get
{
return ParentTables.SingleOrDefault();
// let is crash if there is more than one element in the list
}
set
{
var oldParent = ParentTables.SingleOrDefault();
if (oldParent != value)
{
ParentTables.Clear();
if (value != null)
ParentTables.Add(value);
}
}
}
}
Это только небольшая помощь, если вы используете только свойство ParentTable
.Вы должны избегать использования коллекции и добавлять более одного родителя.Вы не можете сделать это private
, потому что это должно быть сопоставлено.Это также не безопасно на другой стороне отношений.Вы можете написать: parent1.ChildTables.Add(child1); parent2.ChildTables.Add(child1);
, что приведет к двум родителям для child1
в базе данных.Вы можете уловить это, написав вспомогательные методы для добавления дочернего элемента в сущности ParentTable
, которая проверяет, есть ли у добавленного дочернего элемента родительский объект, отличный от this
parent.