我仍然努力爲asp mvc應用程序創建良好的數據訪問層,並且始終缺少某些內容:)
我已經爲DAL創建了單獨的程序集,並且正在使用存儲庫模式,爲國際奧委會注資。
問題是,現在我不知道如何編寫自定義方法(使用通用CRUD方法的方法)。
這是實現:
Context類:如何在使用通用存儲庫時編寫自定義方法
public class MainContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>, IMainContext
{
public MainContext()
: base("DefaultConnection")
{
}
...
public DbSet<Country> Countries { get; set; }
...
public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
庫:
public interface ICountryRepository : IGenericRepository<Country>...
通用存儲庫:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
private readonly IMainContext _context;
private readonly IDbSet<TEntity> _dbSet;
public GenericRepository(IMainContext context)
{
this._context = context;
this._dbSet = context.Set<TEntity>();
}
...
通用倉庫接口:
public interface IGenericRepository<TEntity> where TEntity : class
{
IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "");
TEntity GetByID(object id);
void Insert(TEntity entity);
void Delete(object id);
void Delete(TEntity entityToDelete);
void Update(TEntity entityToUpdate);
}
這是嘗試在庫類中添加自定義的方法:
public virtual IEnumerable<Country> GetByLocation(float location)
{
var data = from c in _context...
return data;
}
但我沒有背景。
我不知道如何實現獲取數據。
我應該注入它或通過new
關鍵字實例(但我猜這是錯誤的)
如何現在實現自定義方法?
是的我明白,這就是爲什麼'ICountry'繼承'GenericRepository',但是當我輸入this.'沒有上下文。 – 1110
但是,當我將'private readonly _context'改爲'internal readonly _context'時,我在資源庫實現中看到它,但沒有DBSets了。 – 1110
嘗試使它成爲DbSet而不是IDbSet –
rleffler