Я пытаюсь отобразить сущности, использующие 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.