我正在开发一个asp.net mvc web应用程序&实体框架6.我希望在我的应用程序中包含这些: -
通用存储库类。
每种实体类型的专用存储库类。此专用存储库将从通用存储库派生。
拥有一个工作单元,它将在专用存储库之间进行协调,以便将存储库中的所有操作包装到单个数据库事务中。
Generic存储库是: -
namespace SkillManagement.DAL
{
public class GenericRepository<TEntity> where TEntity : class
{
internal SkillManagementEntities context;
internal DbSet<TEntity> dbSet;
public GenericRepository(SkillManagementEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}//code goes here...
界面
namespace SkillManagement.DAL
{
public interface ISkillTypeRepository {
}
}
专用存储库之一: -
namespace SkillManagement.DAL
{
public class SkillTypeRepository : GenericRepository<SkillType> , ISkillTypeRepository ,IDisposable
{
private SkillManagementEntities db = new SkillManagementEntities();
public SkillTypeRepository(SkillManagementEntities db)
: base(db)
{
}
public void Dispose()
{
db.Dispose();
}
public void Save()
{
db.SaveChanges();
}
}
工作单元
namespace SkillManagement.DAL
{
public class UnitOfWork : IDisposable
{
private SkillManagementEntities db = new SkillManagementEntities();
private SkillTypeRepository skillTypeRepository;
private Repository2 repository2;
private Repository3 repository3;
// code goes here....
public SkillTypeRepository SkillTypeRepository
{
get
{
if (this.skillTypeRepository == null)
{
this.skillTypeRepository = new SkillTypeRepository(db);
}
return skillTypeRepository;
}
}
//code goes here for repository2 , repository3 , etc..
public void Save()
{
db.SaveChanges();
}
然后在我的控制器内部,我将被称为工作班的联合体如下: -
public class SkillTypeController : Controller
{
private UnitOfWork unitOfWork = new UnitOfWork();
//
// GET: /Course/
public ViewResult Index()
{
var skilltype = unitOfWork.SkillTypeRepository.Get();
return View(courses.ToList());
}
所以我的问题基本上是关于我是否在专用存储库&gt;&gt;通用存储库&gt;&gt;工作单元之间正确传递Context对象。那么多个存储库中的所有操作都将被包装到单个数据库事务中?
有人可以提出建议吗?
答案 0 :(得分:0)
我认为只删除所有存储库中的private SkillManagementEntities db = new SkillManagementEntities();
就足够了。
您已经有一个上下文private SkillManagementEntities db = new SkillManagementEntities();
是您的工作单位。只需将其传递给您的所有存储库,不要在任何存储库中创建新的上下文。