使用实体框架代码创建存储库第一4.3
本文关键字:存储 创建 实体 框架 代码 | 更新日期: 2023-09-27 18:27:29
前一段时间,我使用linq-to-sql创建了存储库和服务,我很难理解它。我终于理解了它,但现在我正在尝试做同样的事情,但使用Code First EF。我很困惑这是如何首先使用代码的。如果我有一个存储库,我可以直接传入一个类对象,并具有select()等。。。这是如何交互的,或者我如何将其连接到/a DbContext?如果有人能为我指明正确的方向或给我一些建议,我将不胜感激。谷歌上没有太多关于这方面的内容,因为这仍然是一个相对较新的模式。
如何使用/我会使用DbSet吗?这些存储库很酷,但令人困惑。
public class IRepository<T> : IDisposable
where T : class, new()
{
IQueryable<T> Select();
IQueryable<T> SelectWith(params Expression<Func<T, object>>[] includeProperties);
T GetById(int id);
T GetByIdWith(int id, params Expression<Func<T, object>>[] includeProperties);
void InsertOnCommit(T model);
void DeleteOnCommit(T model);
}
public class DataContext : DbContext
{
}
这是ASP.Net的EF中的Repository和UnitOfWork教程。希望能有所帮助。(UnitOfWork是为了确保多个存储库共享相同的DataContext)
通用存储库:
public class GenericRepository<TEntity> where TEntity : class
{
internal SchoolDBContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(SchoolDBContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
...
}
public virtual TEntity GetByID(object id)
{
return dbSet.Find(id);
}
public virtual void Insert(TEntity entity)
{
dbSet.Add(entity);
}
...
}
UnitOfWork:调用Save()方法来更新存储库中的所有更改。
public class UnitOfWork : IDisposable
{
private SchoolDBContext context = new SchoolDBContext();
private GenericRepository<Department> departmentRepository;
public GenericRepository<Department> DepartmentRepository
{
get
{
if (this.departmentRepository == null)
{
this.departmentRepository = new GenericRepository<Department>(context);
}
return departmentRepository;
}
}
public void Save()
{
context.SaveChanges();
}
....
}
控制器:
public class CourseController : Controller
{
private UnitOfWork unitOfWork = new UnitOfWork();
//
// GET: /Course/
public ViewResult Index()
{
var courses = unitOfWork.CourseRepository.Get(includeProperties: "Department");
return View(courses.ToList());
}
....
}