C# ASP.NET样板文件IRepository扩展方法

C# ASP.NET样板文件IRepository扩展方法,c#,repository,extension-methods,asp.net-boilerplate,irepository,C#,Repository,Extension Methods,Asp.net Boilerplate,Irepository,例如,我们使用下面的代码获取组织单元中的实体,包括其子组织单元。将此功能添加到所有实体中是否合理,以及如何扩展IRepository public virtual List<Product> GetProductsInOuIncludingChildren(long organizationUnitId) { var code = _organizationUnitRepository.Get(organizationUnitId).Code; var query

例如,我们使用下面的代码获取组织单元中的实体,包括其子组织单元。将此功能添加到所有实体中是否合理,以及如何扩展
IRepository

public virtual List<Product> GetProductsInOuIncludingChildren(long organizationUnitId)
{
    var code = _organizationUnitRepository.Get(organizationUnitId).Code;

    var query =
        from product in _productRepository.GetAll()
        join organizationUnit in _organizationUnitRepository.GetAll() on product.OrganizationUnitId equals organizationUnit.Id
        where organizationUnit.Code.StartsWith(code)
        select product;

    return query.ToList();
}
公共虚拟列表GetProductsInoudingChildren(长组织ID)
{
var code=\u organizationUnitRepository.Get(organizationUnitId).code;
变量查询=
来自_productRepository.GetAll()中的产品
在product.OrganizationUnitId等于organizationUnit.Id的_organizationUnitRepository.GetAll()中加入organizationUnit
其中organizationUnit.Code.StartsWith(代码)
选择产品;
返回query.ToList();
}

您可以使用以下代码

界面:

public interface ITestRepository : IRepository<Test, int>
{

}
public class TestRepository : YourProjectNameRepositoryBase<Test, int>, ITestRepository
{
    public TestRepository(IDbContextProvider<YourProjectNameDbContext> dbContextProvider, IObjectMapper objectMapper)
        : base(dbContextProvider, objectMapper)
        {
        }
}
public class TestAppService : YouProjectNameAppServiceBase, ITestAppService
{
    private readonly ITestRepository _testRepository;
    public TestAppService(ITestRepository testRepository,
    
}
更新

在最新版本中,无需传递
objectmapper
,您需要使用以下更新的构造函数:

public class TestRepository : YourProjectNameRepositoryBase<Test, int>, ITestRepository
{
    public TestRepository(IDbContextProvider<YourProjectNameDbContext> dbContextProvider)
        : base(dbContextProvider)
        {
        }
}
公共类测试存储库:YourProjectNameRepositoryBase,ITestRepository
{
公共测试存储库(IDbContextProvider dbContextProvider)
:base(dbContextProvider)
{
}
}

您可以使用以下代码

界面:

public interface ITestRepository : IRepository<Test, int>
{

}
public class TestRepository : YourProjectNameRepositoryBase<Test, int>, ITestRepository
{
    public TestRepository(IDbContextProvider<YourProjectNameDbContext> dbContextProvider, IObjectMapper objectMapper)
        : base(dbContextProvider, objectMapper)
        {
        }
}
public class TestAppService : YouProjectNameAppServiceBase, ITestAppService
{
    private readonly ITestRepository _testRepository;
    public TestAppService(ITestRepository testRepository,
    
}
更新

在最新版本中,无需传递
objectmapper
,您需要使用以下更新的构造函数:

public class TestRepository : YourProjectNameRepositoryBase<Test, int>, ITestRepository
{
    public TestRepository(IDbContextProvider<YourProjectNameDbContext> dbContextProvider)
        : base(dbContextProvider)
        {
        }
}
公共类测试存储库:YourProjectNameRepositoryBase,ITestRepository
{
公共测试存储库(IDbContextProvider dbContextProvider)
:base(dbContextProvider)
{
}
}

首先,继承
IMustHaveOrganizationUnit

公共类产品:实体,IMustHaveOrganizationUnit
{
公共长组织ID{get;set;}
}
然后定义扩展方法:

公共静态类RepositoryExtensions
{
公共静态列表GetAllInoundingChildren(
这个IRepository存储库,
长期组织
)
其中tenty:类、类、IMustHaveOrganizationUnit
{
使用(var organizationUnitRepository=repository.GetIocResolver().ResolveAsDisposable())
{
var code=organizationUnitRepository.Object.Get(organizationUnitId).code;
变量查询=
来自repository.GetAll()中的实体
在entity.OrganizationUnitId等于organizationUnit.Id的organizationUnitRepository.Object.GetAll()中加入organizationUnit
其中organizationUnit.Code.StartsWith(代码)
选择实体;
返回query.ToList();
}
}
}
用法:

var products=\u productRepository.getAllinuIncludingChildren(organizationUnitId);

首先,继承
IMustHaveOrganizationUnit

公共类产品:实体,IMustHaveOrganizationUnit
{
公共长组织ID{get;set;}
}
然后定义扩展方法:

公共静态类RepositoryExtensions
{
公共静态列表GetAllInoundingChildren(
这个IRepository存储库,
长期组织
)
其中tenty:类、类、IMustHaveOrganizationUnit
{
使用(var organizationUnitRepository=repository.GetIocResolver().ResolveAsDisposable())
{
var code=organizationUnitRepository.Object.Get(organizationUnitId).code;
变量查询=
来自repository.GetAll()中的实体
在entity.OrganizationUnitId等于organizationUnit.Id的organizationUnitRepository.Object.GetAll()中加入organizationUnit
其中organizationUnit.Code.StartsWith(代码)
选择实体;
返回query.ToList();
}
}
}
用法:

var products=\u productRepository.getAllinuIncludingChildren(organizationUnitId);