Создание отдельной таблицы для каждого дочернего объекта в EF Core.C#

Место общения программистов C#
Ответить
Anonymous
 Создание отдельной таблицы для каждого дочернего объекта в EF Core.

Сообщение Anonymous »

Недавно я столкнулся с проблемой в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»