У меня есть простое наследование двух объектов, определенных в модели EF, Person ‹- User.
Человек - это базовый объект / класс, он не является абстрактным и содержит такие поля, как имя, фамилия, адрес электронной почты.
Пользователь является производным объектом / классом и содержит такие поля, как имя пользователя, последний вход, заблокирован.
В базе данных используется схема «таблица на тип», поэтому есть одна таблица для человека и еще одна таблица для пользователя. Оба используют одно и то же поле первичного ключа, PersonID. PersonID - это столбец IDENTITY, но в EDM для StoreGeneratedPattern для PersonID установлено значение None.
Поскольку это схема наследования типа «таблица-за-тип», может быть строка / объект «Человек», не имеющий соответствующей строки / объекта «Пользователь». Это сделано для того, чтобы система могла содержать данные о людях, которые не являются пользователями. Однако Человек в конечном итоге может стать Пользователем, и здесь у меня возникают проблемы.
У меня есть тестовый пример для этого сценария, когда система находит человека, которого она хочет превратить в пользователя. Я пробовал установить поле PersonID в новом объекте User, добавить его в ObjectContext и сохранить изменения. Что происходит, база данных создает новую строку Person вместе с новой строкой User, игнорируя значение, которое я установил для PersonID.
Как я могу это обойти? Нужно ли мне создавать sprocs для обработки грубых операций EDM?