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への2番目の接続を開くためです。
- DTCの使用が発生しないネストされたDataContextを使用するにはどうすればよいですか?
- これはすべて明らかに間違っていますか?DataContextを別の方法で使用する必要がありますか?