定義一個倉儲類:IRepository
/// <summary>
/// EFCore數據操作基本倉儲接口
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IRepository<TModel> where TModel: class
{
/// <summary>
/// 新增
/// </summary>
/// <param name="TModelModel"></param>
void Add(TModel TModelModel);
/// <summary>
/// 刪除
/// </summary>
/// <param name="Id"></param>
void Delete(object Id);
/// <summary>
/// 修改
/// </summary>
/// <param name="TModelModel"></param>
void Update(TModel TModelModel);
/// <summary>
/// 根據主鍵查詢單個
/// </summary>
/// <param name="Id"></param>
/// <reTModelurns></reTModelurns>
TModel GetSingle(object Id);
/// <summary>
/// 返回列表
/// </summary>
/// <reTModelurns></reTModelurns>
IEnumerable<TModel> GetList();
/// <summary>
/// 獲取數據庫上下文
/// </summary>
DbContext dbContext { get; }
/// <summary>
/// 獲取該實體類型
/// </summary>
DbSet<TModel> Entities { get; }
}
再定義一個倉儲類的實現:
public class EfRepository<TModel> : IRepository<TModel> where TModel : class
{
private readonly CoreContext _coreContext;
public EfRepository(CoreContext coreContext)
{
this._coreContext = coreContext;
}
public DbContext dbContext
{
get
{
return _coreContext;
}
}
public DbSet<TModel> Entities
{
get
{
return _coreContext.Set<TModel>();
}
}
public void Add(TModel model)
{
_coreContext.Add(model);
_coreContext.SaveChanges();
}
public void Delete(object Id)
{
var entity = GetSingle(Id);
if (entity != null)
{
_coreContext.Remove(entity);
_coreContext.SaveChanges();
}
}
public IEnumerable<TModel> GetList()
{
return _coreContext.Set<TModel>().ToList();
}
public TModel GetSingle(object Id)
{
return _coreContext.Set<TModel>().Find(Id);
}
public void Update(TModel model)
{
_coreContext.Update(model);
}
}
Ps:CoreContext是使用EF框架自動生成的數據庫上下文,有疑惑移步:
https://note.youdao.com/ynoteshare1/index.html?id=e1a48103e47ae5ba4b76d0ce7b277743&type=note
使用的時候再Starup中注入:
services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>));