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();
}
}
}
Este es un ejemplo de DataContext anidado (no probado). El problema comienza cuando se agrega un TransactionScope a nuestro pequeño experimento (como se muestra arriba). El primer AddFile en la función AddFolder escalará la transacción a DTC (lo cual es malo por todos los medios), porque AddFile inicializa el nuevo DataContext, abriendo así una segunda conexión al DB.¿Cómo manejar el contexto de datos anidados en el BL?
- ¿Cómo puedo utilizar el DataContext anidado que no producirá un uso de DTC?
- ¿Todo esto simplemente está mal? ¿Debo usar el DataContext de manera diferente?
Lamentablemente, sentí que esta pregunta no recibió la atención que merecía y no se ha respondido por completo :( –