Для начала, У меня есть структура сущностей, которую я не могу изменить .
В моей базе данных есть таблица Person
и таблица Users
(для контекста этого вопроса).
CREATE TABLE [Person] ...
CREATE TABLE [User] ...
Мои объекты используют некоторое наследование
public abstract PersonBase
{
public string Id { get; set; }
// person meta data
}
public class Person : PersonBase
{
// additional data for app 1
}
public class User
{
public string PersonId { get; set; }
public PersonBase Person { get; set; } // I cannot change this #sadpanda
}
Когда я пытаюсь настроить отношение
public class UserConfiguration : IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
builder.HasOne(x => x.Person).WithMany().HasForeignKey(x => x.PersonId);
}
}
И впоследствии пытаюсь запросить его, EF Core генерирует следующий запрос
SELECT ...
FROM "User" AS "e"
LEFT JOIN (
SELECT "e0".*
FROM "PersonBase" AS "e0"
WHERE "e0"."Deleted" = 0
) AS "t" ON "e"."PersonId" = "t"."Id"
....
И я получаю ошибку
Ошибка SQLite 1: «нет такой таблицы: PersonBase».
Есть ли способ настроить это так, чтобы при попытке увлажнения User.Person
EF использовал Person
таблица из базы данных, хотя тип сущности PersonBase
?
примечание: для повторения я не могу изменить структуру сущности, но у меня есть полный контроль над моей конфигурацией сущности.
Я попытался настроить мою конфигурацию со строками
builder.HasOne("Person").WithMany().HasForeignKey("PersonId");
Но затем он пожаловался на теневое состояние
Тип сущности «Персона» находится в теневом состоянии. Действительная модель требует, чтобы все типы сущностей имели соответствующий тип CLR.