C# 如何在通用存储库中添加其他特定于实体的方法
我已经了解了通用存储库和工作单元。C# 如何在通用存储库中添加其他特定于实体的方法,c#,entity-framework,entity-framework-6,unit-of-work,generic-collections,C#,Entity Framework,Entity Framework 6,Unit Of Work,Generic Collections,我已经了解了通用存储库和工作单元。 但我不清楚具体实体的方法。 例如,我有实体国家和城市 通过使用通用存储库,我可以使用Get()或GetById(),这将返回我country或city: var countries = unitOfWork.CountryRepository.Get(); var cities = unitOfWork.CityRepository.Get(); 但是Country有一个CountryCode字段,我想通过该字段获得Country,所以我想我必须在泛型存
但我不清楚具体实体的方法。
例如,我有实体
国家
和城市
通过使用通用存储库,我可以使用
Get()
或GetById()
,这将返回我country或city:
var countries = unitOfWork.CountryRepository.Get();
var cities = unitOfWork.CityRepository.Get();
但是Country有一个CountryCode
字段,我想通过该字段获得Country,所以我想我必须在泛型存储库类中添加新方法,并像这样调用它:
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();
}
}
如果您想要特定于某个实体的方法,那么您可以在该实体的存储库中声明这些方法,即
GetByCountryCode
方法在CountryRepository
类中声明,不是泛型基类。我在存储库中声明了特定于实体的其他方法,但在控制器中看不到新方法。请查看我的更新问题。我没有将返回类型从属性更改为CountryRepository
。Tnx
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;
}
}
var country = unitOfWork.CountryRepository. // no GetByCode()