Недавно я столкнулся с проблемой в EF Core, когда мне нужно было, чтобы родительские сущности ссылались на дочерние сущности в отношениях «один ко многим». Поскольку все родители используют один и тот же дочерний класс, а идентификаторы представлены GUID, я решил, что могу использовать одну и ту же дочернюю таблицу для всех дочерних объектов следующим образом:
Код: Выделить всё
public class Child
{
public Guid Id { get; set; }
}
public class ParentBase
{
public Guid Id { get; set; }
public List Children = new List();
}
public class Parent1 : ParentBase;
public class Parent2 : ParentBase;
Это оказалось проблематичным для EF Core, поскольку вызывает ошибки ограничения внешнего ключа. Поэтому я сейчас ищу решение и выясняю, как люди обычно решают данную проблему. Естественно, я пошел дальше и создал отдельный тип дочерней сущности для каждого типа объекта, например:
Код: Выделить всё
public abstract class ChildBase;
public class Parent1Child : ChildBase;
public class Parent2Child : ChildBase;
public class ParentBase
where T1 : ChildBase
{
public List Children = new List();
}
public class Parent1 : ParentBase
;
public class Parent2 : ParentBase;
Это работает (создает отдельные дочерние таблицы), НО также вводит обобщение, и мне не нравится дополнительная сложность. Таких материнских организаций дюжина. Есть ли способ реорганизовать код так, чтобы он по-прежнему решал первоначальную проблему, но им было легче управлять?
Подробнее здесь:
https://stackoverflow.com/questions/786 ... in-ef-core