加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

实体框架asp.net应用程序中的UOW和存储库

发布时间:2020-12-16 10:01:35 所属栏目:asp.Net 来源:网络整理
导读:我刚刚开始阅读使用存储库和工作单元模式.我目前正在尝试在asp.net Web表单应用程序中使用它与Entity Framework.但我有一个问题,我不确定我是否能够以一种简单的方式解释. 据我所知,工作单元用于封装业务事务.从我看到的示例中,以下列方式使用uow businessMe
我刚刚开始阅读使用存储库和工作单元模式.我目前正在尝试在asp.net Web表单应用程序中使用它与Entity Framework.但我有一个问题,我不确定我是否能够以一种简单的方式解释.

据我所知,工作单元用于封装业务事务.从我看到的示例中,以下列方式使用uow

businessMethod1()
 {
    uow u = new uow(); //instantiate unit of work
    repository1 rep1 = new repository1(uow); //instantiate repository1 
    repository2 rep2 = new repository2(uow); //instantiate repository1 
    rep1.dowork();
    rep2.dowork();
    u.save(); //save the changes made to the database. (effectively saving changes made      
              //in both repository classes
 }

现在假设我有一个businessMethod2(),它类似于上面描述的方法.假设我想在businessMethod2()中使用businessMethod1(),这将是最佳实践.我想分享工作单位,所以我应该把它作为一个论点来传递?即改变上述方法

businessMethod1(uow u)
{
    bool isNew = false;
    if (u == null)
    {
        u = new uow();
        isNew = true;
    }

    repository1 rep1 = new repository1(uow); //instantiate repository1 
    repository2 rep2 = new repository2(uow); //instantiate repository1 
    rep1.dowork();
    rep2.dowork();

    if (isNew)
      u.save(); //save the changes made to the database.         
}

这是一个正确的方法吗?

我在想更好的方法是使用单身人士哇.在每个页面请求中,都会创建一个新的uow实例,并由所有业务方法共享.在新请求中,将创建不同的实例.使用单身uow意味着我不必将其传递给我的任何商业方法,并且可以同时与我的所有业务方法共享它.

这样做有什么缺点吗?还有更好的方法来实现这个吗?

解决方法

解决此问题的一种方法是使用依赖注入.通常,构造函数注入与单个入口点一起使用以解决依赖性.

public class MyBusinessService
{

   public MyBusinessService(Repository1 repository1,Repository2,uow u)
   {
        // assign the params to fields
   }

   public void businessMethod1()
   {
   }

   public void businessMethod1()
   {
   }
}

有很多流行的DI框架.选择你认为适合你的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读