如何在asp.net中为Value对象创建具有EF核心的存储库

时间:2018-06-26 08:01:23

标签: c# entity-framework-core aspnetboilerplate

我已经使用ABP .net核心启动模板创建了第二个dbContext。 一切正常,但是第二个dbContext仅用于从视图中提取数据。

我有一个映射到视图的类,但是该视图没有主键。 而如果要有一个主键,它将是一个组合键。

所以我不能从Entity派生该类,所以我选择从ValueObject派生它。

但是ABP不会为ValueObjects afaik创建存储库。

所以我的问题是,如何为ValueObject创建自定义.net核心存储库。 (我只需要实现GetAll,因为它将是一个只读存储库)

1 个答案:

答案 0 :(得分:1)

您可以从Entity派生并在DbContext的OnModelCreating中配置视图以将Id属性映射到列。

modelBuilder.Entity<YourEntity>().Property(t => t.Id).HasColumnName("YourColumn");

否则,您可以通过依赖项注入IDbContextProvider服务获得并像简单的DbContext一样使用它

private readonly IDbContextProvider<TDbContext> _dbContextProvider;

public YourService(IDbContextProvider<TDbContext> dbContextProvider)
{
    _dbContextProvider = dbContextProvider;
}

public void MethodName(){
    var context = _dbContextProvider.GetDbContext();
    context.YourEntity.OrderBy(a => a.Name);
}