来自存储过程的EF Core 2.0自动映射实体(TPH继承)

时间:2018-10-11 13:08:32

标签: c# sql entity-framework-core

我正在尝试根据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中创建继承映射。

0 个答案:

没有答案