在.net中处理事务。我有一个关于通过子函数流动事务的问题。如果对象上下文在子方法中是通用的,我需要使用依赖事务吗?
例如,在下面的代码中-我在类的构造函数中声明了对象上下文(不确定这是否是最佳实践)
public class EmployeeRepository
{
private EmployeeContext ec;
public EmployeeRepository()
{
objectContext = new EmployeeContext();
}
public InitTransaction(EmployeeEntity emp1)
{
using (TransactionScope transaction = new TransactionScope())
{
try
{ ec.employees.AddObject(emp1);
SubFunction1();
ec.SaveChanges();
}
catch
{
//catch
}
}
//commit the transaction here
ec.AcceptAllChanges();
}
public SubFunction1()
{
//some processing
//using same object context
ec.someother.AddObject(someobject);
ec.SaveChanges();
}
}我希望子功能也成为事务的一部分?在这种情况下,即使我使用相同的对象上下文,我也应该在SubFunction1中使用依赖事务吗?或者我应该添加一个
using (TransactionScope transaction = new TransactionScope());在SubFunction1中。在正确的方向上的指针将非常感谢。
发布于 2011-08-19 19:22:48
事务作用域可以是嵌套的(它们的工作方式类似于SQL @@TRANCOUNT机制),所以从理论上讲,您可以在存储库中使用TransactionScopes,例如,不仅可以在业务/服务层中保持父表:子表关系的ACID,还可以在业务/服务层中使用分布式事务(例如,跨多个实体,可能跨多个数据库,甚至跨其他资源,如消息队列和Transactional file systems )。
请注意,default isolation level of TransactionScope是可读序列化的-这可能会导致锁定/死锁。
发布于 2011-08-19 19:36:19
您可以考虑使用依赖项注入来传递相同的ObjectContext,这样就可以避免TransactionScope。
不是在存储库中创建Context,而是通过构造函数注入它。
public class EmployeeRepository
{
private EmployeeContext ec;
public EmployeeRepository(EmployeeContext objectContext)
{
ec = objectContext;
}
}看一看this answer
https://stackoverflow.com/questions/7120738
复制相似问题