我正在尝试根据dba提供的sproc在Core 2项目中使用EF映射实体,让我们将其称为“ USP_GetPersonSproc”。
我最初的实现是将该存储过程映射到“ 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中创建继承映射。