Упорядочить объекты моего домена в DDD при использовании ado entity framework

#entity-framework #.net-3.5 #domain-driven-design #oop

#entity-framework #.net-3.5 #дизайн, управляемый доменом #ооп

Вопрос:

У меня есть эти 2 типа пользователей: родители и дочерние элементы, оба являются пользователями и имеют одинаковые свойства, но разные методы.

Я создал базовый класс пользователя и 2 класса: родительский и дочерний, оба наследуют базовый класс form User, и у каждого класса есть несколько разных методов.
Класс User является частичным классом, поскольку модель entity framework имеет тот же класс, поскольку в базе данных есть только таблица Users, без родительских или дочерних элементов.

Теперь, когда я создаю объект из родительского класса и пытаюсь вставить в базу данных с помощью ado entity framework « AddObject("Users", (User)_parent) «, он выдает мне сообщение об ошибке, что я вставляю родительский объект и что с этим идентификатором вставить нечего.

Итак, в моем проекте, управляемом доменом, что-то не так, или я должен что-то отредактировать в entity framework?

Ответ №1:

Это называется таблицей для иерархии (TPH). Это означает, что вы хотите использовать одну таблицу для хранения нескольких объектов, которые унаследованы от базового объекта. В вашем случае это немного специфично, потому что унаследованные объекты не имеют никаких дополнительных свойств для хранения.

Вам нужно добавить родительский и дочерний классы в вашу модель сущности (производную от пользовательской сущности). Вам нужен один дополнительный столбец в базе данных, чтобы отличать родительский столбец от дочернего — это единственный способ, которым EF узнает, какой объект создавать при выполнении запроса из пользовательской таблицы. Вам нужно сопоставить родительский объект с правильным значением столбца дискриминатора, а дочерний объект — с другим значением столбца дискриминатора. Вот сообщение в блоге о TPH в EF.

Комментарии:

1. идеальный ответ, он мне очень помог, а запись в блоге направляла меня шаг за шагом, и все прошло очень хорошо, спасибо.