Автоматизированные сущности EF Core 2.0 (наследование TPH) из хранимой процедуры - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь отобразить сущности, использующие EF, в проекте Core 2 на основе sproc, предоставленного нашими dba, давайте назовем его «USP_GetPersonSproc».

Моя первоначальная реализация состояла в том, чтобы сопоставить этот sproc с «PersonEntity»."

public class PersonEntity
{
    public int PersonID { get; set;}
    public string CommonColumn{ get; set; }
    public string UniqueColumn { get; set; }
    public PersonType PersonTypeID { get; set;}
}

Это работает нормально, однако тип обрабатывает весь sproc, который будет возвращать различные значения для PersonType, которые я хотел бы сопоставить с производными типами, такими как

public class UniqueEntity : PersonEntity
{
    public string UniqueColumn { get; set; }
}

Или для дальнейшего указания в соответствии с этим соглашением https://www.learnentityframeworkcore.com/inheritance/table-per-hierarchy

Код хранилища пока выглядит следующим образом

public class PersonRepository : DbContext, IPersonRepository 
{
    public PersonRepository(DbContextOptions<PersonRepository> options) : base (options) {}

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<PersonEntity>().HasKey(p => p.PersonID);
    }

    private DbSet<PersonEntity> Person { get; }

    public IEnumerable<PersonEntity> GetAllPersons()
    {
        var result = Person.FromSql("USP_GetPersonSproc").AsNoTracking().ToList();

        return result;
    }

    public async Task<int> UpdateAsync(int id)
    {
        return Database.ExecuteSqlCommand("USP_UpdatePerson @PersonID = @PersonID", new SqlParameter("@PersonID", id));
    }
}

Поэтому мой вопрос заключается в том, как я могу создать отображение наследования в EF Core 2 с этимодиночный sproc, при условии, что я не могу внести какие-либо изменения в sproc, и будет доступен только этот sproc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...