如何使用 EF 核心为 asp.net 样板中的值对象创建存储库
How to create a Repository with EF core for a Value object in asp.net Boilerplate
我已经使用 ABP .net 核心启动模板创建了第二个 dbContext。
这一切工作正常,但第二个 dbContext 仅用于从视图中提取数据。
我有一个映射到视图的 class,但是这个视图没有主键。
如果它有一个主键,它将是一个组合键。
所以我无法从 Entity 派生 class,所以我选择从 ValueObject 派生它。
但是 ABP 不会为 ValueObjects afaik 创建存储库。
所以我的问题是,如何为 ValueObject 创建自定义 .net 核心存储库。 (我只需要一个 GetAll 的实现,因为它将是一个只读存储库)
您可以从实体派生并在 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);
}
我已经使用 ABP .net 核心启动模板创建了第二个 dbContext。 这一切工作正常,但第二个 dbContext 仅用于从视图中提取数据。
我有一个映射到视图的 class,但是这个视图没有主键。 如果它有一个主键,它将是一个组合键。
所以我无法从 Entity 派生 class,所以我选择从 ValueObject 派生它。
但是 ABP 不会为 ValueObjects afaik 创建存储库。
所以我的问题是,如何为 ValueObject 创建自定义 .net 核心存储库。 (我只需要一个 GetAll 的实现,因为它将是一个只读存储库)
您可以从实体派生并在 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);
}