看了一些mvc+repository+ef的文章,总说要建立一个UnitOfWork类用来保证什么,没懂是啥意思,用这个和不用这个有什么区别?
我再编辑一下。
我看到有人说是因为复杂的业务会使用多个Repository,所以导致用了多个DbContext,所以调用DbContext的save的时候就有问题了。
可是我发现用ioc注入的时候,是保证了一个http 请求只使用一个DbContext实例的,这样不就是没上面的问题了???那还要这个UnitOfWork干什么
应该是单元工作模式,讲dal数据的保存抽出来,放到bll层,这样可以做复杂逻辑,如数据库的几次交互,只需一次保存就行了,我是这样理解的
其实hibernate和ef本身实现了这个模式 有时再次封装uow是为了业务的可理解性 个人观点
UnitOfWork类似于工作单元,是对增删改查的一个封装,可以说是一个通用的代码块,不同的areas下只需要改不同的edmx就行了。const string inputFile = @"../Models/Memeber.edmx"; 这句修改就行了。
工作单元,对于EF和linq to sql来说,实现join查询需要是同一个数据上下文才可以,有了工作单元,可以保证它们处在同一个数据上下文之中.而且它与架构无关,你的数据上下文可以是EF,也可以是LINQTOSQL,这一些很重要.
下面是通过ioc动态生产的数据上下文对象
//反射出仓储对象 db = ServiceLocator.Instance.GetService<IUnitOfWork>();