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);