UnitOfWork repository pattern, есть 2 сущности, которые наследуются от abstract class (Base) в таком виде:
abstract class BaseEntity
public class NewUser : BaseEntity
public class User : NewUser
NewUser и User мапятся в одну таблицу Users с дискриминатором (11 для NewUser и 12 для User).
Однако, когда беру NewUsers через _unitOfWork.RepoNewUsers.GetAll() - в DBContext получаю записи с User.
SQL - query при этом содержит WHERE с указанием обоих дискриминаторов, хотя в Репозитории тип указан NewUser. (_entitySet = _dbContext.Set(<TEntity>), где TEntity и есть NewUser
Ну и второй симптом (следствие): когда создаю запись NewUser, в контексте есть, допустим, 4 записи User (контекст неправильно вытащил данные), на этапе сохранения пытается присвоить NewUser id = 5, и в контекст добавляется уже существующий NewUser с ID=5 из таблицы, State меняется с Added на Unchanged и как бы добавления не происходит.
Кажется, тема должна быть известна, но не могу найти подобного, подскажете советом, что делаю не так? Если данных мало - скажите, пож-та, какие ещё требуются
Подскажите, пожалуйста, а какая ещё есть разница между классами User и NewUser?
Пока моя гипотеза заключается в том, что нужно base class описать в конфиге EF, в виде: modelBuilder.Entity<SiYatsEntityBase>().UseTphMappingStrategy(); Как будто EF не понял иерархию
Для EF не надо реализовывать паттерн Unit of work, он уже под капотом сидит.
Обсуждают сегодня