gpt4 book ai didi

asp.net - Entity Framework asp.net 应用程序中的 UOW 和存储库

转载 作者:行者123 更新时间:2023-12-01 01:21:26 29 4
gpt4 key购买 nike

我刚刚开始阅读有关使用存储库和工作单元模式的内容。我目前正在尝试在 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()这类似于上面描述的方法。假设我想使用 businessMethod1()来自 businessMethod2()什么是最佳做法。我想共享工作单元,所以我应该将它作为参数传递吗?即将上述方法更改为
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 实例,并由所有业务方法共享。在一个新请求上,创建一个不同的实例。使用单例 uow 意味着我不必将它传递给我的任何业务方法,并且可以同时与我的所有业务方法共享它。

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

最佳答案

解决此问题的一种方法是使用依赖注入(inject)。通常构造函数注入(inject)与单个入口点一起使用以解决依赖关系。

public class MyBusinessService
{

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

public void businessMethod1()
{
}

public void businessMethod1()
{
}
}

那里有许多流行的 DI 框架。选择你认为适合你的。

关于asp.net - Entity Framework asp.net 应用程序中的 UOW 和存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980007/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com