#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. идеальный ответ, он мне очень помог, а запись в блоге направляла меня шаг за шагом, и все прошло очень хорошо, спасибо.