实体框架中具有工作单元模式的可重用编码

时间:2014-05-03 08:37:31

标签: entity-framework unit-of-work

让我们假设下面的代码通过Unit Of Work模式从数据库中检索数据。 由于GetByID是常见操作,因此可以在Repository类中声明它。

UnitOfWork w = new UnitOfWork();
w.someRepository.GetByID(10);

如果我需要在10个单独的文件中调用GetByID方法,该怎么办?我应该每次都创建一个UnitOfWork类的实例并调用GetByID,或者下面的代码块是否对UnitOfWork模式有效?

public class SomeRepositoryProvider {

public tbl_somerepoclass GetByID(int id) {

   UnitOfWork w = new UnitOfWork();
   return w.someRepository.GetByID(10);


}
}

1 个答案:

答案 0 :(得分:0)

通常,当您只想从数据库中检索数据时,您甚至不需要UnitOfWork。 UnitOfWork更像是db的事务 - 你试图一次性地将一些数据集持久保存到db - 如果每次运行都可以保存,如果没有,那么一切都是回滚。要按ID获取实体,您只需要存储库。我在实践中遇到的最佳解决方案是为每个实体准备Repository类并预先创建有用的方法。仅当您要保存数据时才使用UnitOfWork。所以一般情况下你应该像这样使用你的存储:

someRepository.GetById(10);

当您实例化Repository时,只需将操作所需的适当对象传递给其构造函数 - 如果是实体框架ver。 > 4.0 DbContext。

如果你想添加新实体,请使用它:

someRepository.Add(newEntity);
unitOfWork.Save();