在c#中使用基本接口有什么好处
本文关键字:接口 什么 | 更新日期: 2023-09-27 18:30:08
我正在使用一个应用程序,其中创建了如下所示的Base接口
public interface IBaseRepository : IDisposable
{
bool IsUnitOfWork { get; set; }
void SaveChanges();
}
然后其他接口将此接口扩展为
public interface ICourseRepository : IBaseRepository
{
Course GetCourseById(int id);
List<Course> GetCourses();
CourseModule GetCourseModuleById(int id);
}
只是想知道这种方法的优点是什么
基本存储库允许您指定希望所有存储库合约具有的行为,而无需在您创建的每个IMyEntityRepository
中重复它。
更有趣的是实现这样的基本存储库,并为通用操作指定通用代码:
public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class {
private DbContext _context;
public Repository(DbContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
_context = context;
}
protected DbContext DbContext { get { return _context; } }
public void Create(TEntity entity) {
if (entity == null) {
throw new ArgumentNullException("entity");
}
DbContext.Set<TEntity>().Add(entity);
DbContext.SaveChanges();
}
public TEntity GetById(int id) {
return DbContext.Set<TEntity>().Find(id);
}
public void Delete(TEntity entity) {
if (entity == null) {
throw new ArgumentNullException("entity");
}
DbContext.Set<TEntity>().Attach(entity);
DbContext.Set<TEntity>().Remove(entity);
DbContext.SaveChanges();
}
public void Update(TEntity entity) {
if (entity == null) {
throw new ArgumentNullException("entity");
}
DbContext.Set<TEntity>().Attach(entity);
DbContext.Entry(entity).State = EntityState.Modified;
DbContext.SaveChanges();
}
等等。,然后让MyEntityRepory扩展BaseRepository
您可以为多个类/接口重用基本接口,而不需要实现其他接口-因此,您可以在一堆类上使用IsUnitOfWork
,而无需在所有这些类上实现GetCourseById
。但是,您也可以确保所有的CourseRepository都被视为工作单元。