【问题标题】:How to create a Repository with EF core for a Value object in asp.net Boilerplate如何使用 EF 核心为 asp.net 样板中的值对象创建存储库
【发布时间】:2018-06-26 08:01:22
【问题描述】:

我使用 ABP .net 核心启动模板创建了第二个 dbContext。 这一切都很好,但第二个 dbContext 仅用于从视图中提取数据。

我有一个映射到视图的类,但是这个视图没有主键。 如果它有一个主键,它就是一个组合键。

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

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

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

【问题讨论】:

    标签: c# entity-framework-core aspnetboilerplate


    【解决方案1】:

    您可以从实体派生并在 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);
    }
    

    【讨论】:

    • 您的第一个解决方案是不可能的,因为我没有要映射的单个列。密钥由几列组成。我最终使用了您第二个建议的变体,通过使用 IDbContextProvider 创建一个可以应用于 ValueObjects 的通用读取器(而不是存储库)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2022-12-10
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多