如何在 WPF 应用程序中管理 DbContext
How to manage DbContext in a WPF Applicatoin
我接手了一个使用了entity framework的WPF项目。我之前的人使用了一个全局 DbContext。经过一番阅读后,很明显这是一种不好的做法,原因有几个。现在我的工作是重构项目以使用 DbContextFactory 并为每个工作单元创建新的 DbContext。
一种方法即 SaveSales
调用另一种方法 IncreaseReceiptNumber
。在 IncreaseReceiptNumber
中,一个条目被添加到 table 并调用 SaveChanges。现在在 SaveSales
中,我用 using (var clientDB = dbContextFactory.Create() {}
创建了一个 DbContext
。
我的问题是,在这种情况下,我应该将 DbContext
从 SaveSales
传递到 IncreaseReceiptNumber
还是应该 IncreaseReceiptNumber
创建它自己的 DbContext
?或者在更一般的意义上,每个方法都应该创建一个新的 DbContext
还是可以通过参数传递 DbContext
如果它属于工作单元?
IMO,这个问题没有单一的答案。您必须针对每种情况决定是否需要多个连接的开销(开销在池中很小,但存在),共享单个 DbContext 是否提供额外的好处(实体已经附加),以及共享是否使事情变得更加困难(您在循环中调用该方法,并冒着“连接已打开”错误的风险)。必须在 case-by-case 的基础上权衡这些因素。对于它的价值,我已经完成了所有这些事情...正如他们所说,使用正确的工具来完成工作。
我接手了一个使用了entity framework的WPF项目。我之前的人使用了一个全局 DbContext。经过一番阅读后,很明显这是一种不好的做法,原因有几个。现在我的工作是重构项目以使用 DbContextFactory 并为每个工作单元创建新的 DbContext。
一种方法即 SaveSales
调用另一种方法 IncreaseReceiptNumber
。在 IncreaseReceiptNumber
中,一个条目被添加到 table 并调用 SaveChanges。现在在 SaveSales
中,我用 using (var clientDB = dbContextFactory.Create() {}
创建了一个 DbContext
。
我的问题是,在这种情况下,我应该将 DbContext
从 SaveSales
传递到 IncreaseReceiptNumber
还是应该 IncreaseReceiptNumber
创建它自己的 DbContext
?或者在更一般的意义上,每个方法都应该创建一个新的 DbContext
还是可以通过参数传递 DbContext
如果它属于工作单元?
IMO,这个问题没有单一的答案。您必须针对每种情况决定是否需要多个连接的开销(开销在池中很小,但存在),共享单个 DbContext 是否提供额外的好处(实体已经附加),以及共享是否使事情变得更加困难(您在循环中调用该方法,并冒着“连接已打开”错误的风险)。必须在 case-by-case 的基础上权衡这些因素。对于它的价值,我已经完成了所有这些事情...正如他们所说,使用正确的工具来完成工作。