public class TestBL
{
public static void AddFolder(string folderName)
{
using (var ts = new TransactionScope())
{
using (var dc = new TestDataContext())
{
var folder = new Folder { FolderName = folderName };
dc.Folders.InsertOnSubmit(folder);
dc.SubmitChanges();
AddFile("test1.xyz", folder.Id);
AddFile("test2.xyz", folder.Id);
AddFile("test3.xyz", folder.Id);
dc.SubmitChanges();
}
ts.Complete();
}
}
public static void AddFile(string filename, int folderId)
{
using (var dc = new TestDataContext())
{
dc.Files.InsertOnSubmit(
new File { Filename = filename, FolderId = folderId });
dc.SubmitChanges();
}
}
}
这是嵌套 DataContext 的示例(未经测试)。当一个 TransactionScope 添加到我们的小实验中时,问题就开始了(如上所示)。AddFolder 函数中的第一个 AddFile 会将事务升级到 DTC(这绝对是不好的),因为 AddFile 初始化了新的 DataContext,从而打开了与 DB 的第二个连接。
- 如何使用不会发生 DTC 使用的嵌套 DataContext?
- 这一切都是错的吗?我应该以不同的方式使用 DataContext 吗?