gpt4 book ai didi

c# - 如何处理 BL 中的嵌套数据上下文?

转载 作者:太空狗 更新时间:2023-10-29 20:32:33 26 4
gpt4 key购买 nike

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,从而打开到数据库的第二个连接。

  1. 如何使用不会发生 DTC 使用的嵌套 DataContext?
  2. 这一切都是错的吗?我应该以不同的方式使用 DataContext 吗?

最佳答案

毫无疑问,应尽可能避免升级为 DTC。当我第一次阅读您的问题时,我的直觉告诉您您的事务不会升级为 DTC,因为您在两个数据上下文中使用相同的连接字符串。然而,根据this article ,我错了。

confusion 中你并不孤单关于数据上下文的最佳实践。如果你在网上搜索这个,到处都有答案。在您的示例中,您可以将数据上下文传递给 AddFile 方法。或者,您可以将此数据访问重构为一个类,该类维护数据上下文的生命周期,直到文件夹和文件全部保存。 Rick Strahl 发布an article关于几种技术。

不过,我所看到的有关 LINQ to SQL 的答案似乎都不令人满意。您是否考虑过使用 ORM 来避免管理您的数据层?我用过NetTiers取得了巨大的成功,但我听到了关于 PLINQO 的好消息.这些都需要 CodeSmith , 但有 many alternatives .

关于c# - 如何处理 BL 中的嵌套数据上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1351787/

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