我正在使用 C# (.NET 4.5) 中的 Visual Studio 2012 和 Entity Framework 5.0 和 SQL Server 2008 编写一个 WinForms 应用程序。目前,我为每个表单使用一个数据库上下文。除了相关的子实体(即实体集合)之外,每个表单都显示单个实体(我将其称为“父实体”)的数据:
Parent Entity
│
├─ Child Entities 1
│
├─ Child Entities 2
│
├─ Child Entities 3
│
└─ Child Entities 4
不幸的是,我没有快速连接到数据库,并且需要很长时间(大约 30 秒,这对我的用户来说似乎是永远的)来查询数据并填充表单。所以,这就是我的想法:
我不想为每个表单使用一个数据库上下文,而是想为父实体创建一个数据库上下文,并为每个子实体集合创建一个单独的数据库上下文。 我想在不同的线程上创建这些上下文(或者线程池将分配东西),然后在创建这些上下文后将它们返回到表单。 请注意以下条件:
任何时候都不会有多个线程与数据库上下文交互。
单独的数据库上下文将保持独立(即使在返回到主窗体之后)并且它们不会相互交互。
用户完成所有更改后,我计划在事务中为每个上下文包装 SaveChanges() 事件:
using (TransactionScope scope = new TransactionScope())
{
parentContext.SaveChanges();
childContext1.SaveChanges();
childContext2.SaveChanges();
childContext3.SaveChanges();
childContext4.SaveChanges();
scope.Complete();
}
基本上,我的问题如下:
这行得通吗?
这种方法有什么不好的原因吗?
在这种情况下你会推荐什么?