我有followed this tutorial,我了解了通用存储库和工作单元
但我不清楚实体具体的方法
例如,我有实体Country
和City
。
通过使用通用存储库,我可以使用Get()
或GetById()
来返回国家/地区或城市:
var countries = unitOfWork.CountryRepository.Get();
var cities = unitOfWork.CityRepository.Get();
但是Country有一个CountryCode
字段,我想通过该字段获取国家/地区,所以我想我必须在通用存储库类中添加新方法并将其称为:
var countries = unitOfWork.CountryRepository.GetByCountryCode(string code);
但这意味着我也可以这样做:
var countries = unitOfWork.CityRepository.GetByCountryCode(string code);
我在这里很困惑,我知道我错过了一些东西
如何使用通用存储库并添加其他特定于实体的方法?
的更新
我使用其他方法创建存储库类:
public class CountryRepository : GenericRepository<Country>
{
public CountryRepository(MainContext context) : base(context) { }
public virtual Country GetByCode(string code)
{
return dbSet.Where(c => c.Code == code).First();
}
}
在UnitOfWork.cs
中public class UnitOfWork : IDisposable
{
private MainContext context = new MainContext();
private ApplicationUserRepository applicationUserRepository;
private CountryRepository countryRepository;
public GenericRepository<Country> CountryRepository
{
get
{
if (this.countryRepository == null)
{
this.countryRepository = new CountryRepository(context);
}
return countryRepository;
}
}
但是从控制器我看不到GetByCode()
:
var country = unitOfWork.CountryRepository. // no GetByCode()
答案 0 :(得分:1)
如果您需要特定于实体的方法,那么您可以在该实体的存储库中明确声明这些方法,即您的GetByCountryCode
方法在CountryRepository
类中声明,而不是通用基类