如何在通用存储库中添加其他实体特定方法

时间:2014-07-06 14:05:10

标签: c# entity-framework entity-framework-6 unit-of-work generic-collections

我有followed this tutorial,我了解了通用存储库和工作单元 但我不清楚实体具体的方法 例如,我有实体CountryCity
通过使用通用存储库,我可以使用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()

1 个答案:

答案 0 :(得分:1)

如果您需要特定于实体的方法,那么您可以在该实体的存储库中明确声明这些方法,即您的GetByCountryCode方法在CountryRepository类中声明,而不是通用基类