创建 TransactionScope 和创建上下文顺序
Create TransactionScope and Create Context order
这些代码有什么区别:
using (TransactionScope tran = new TransactionScope ())
{
using (Entities ent = new Entities())
{
和
using (Entities ent = new Entities())
{
using (TransactionScope tran = new TransactionScope ())
{
行顺序重要吗?
谢谢
在这种情况下没关系,因为 Entities
看起来像模型/数据 class,它不能/不需要加入交易,所以你可以有任何订单,它不会产生差异。现在,如果 Entities
操作中存在任何问题,Read / DML 事务也会中止,假设操作发生在环境事务上下文中,尽管 class / 对象像 IDBConnection
无论如何都会自动登记到事务中(前提是未设置为 false),但是即使 Connection 是在事务上下文之外创建的,也不会自动登记,需要显式登记事务上下文
In Short
对于您当前的代码,直到您处理需要事务登记的对象(如 IDBConnection
)之前,这并不重要。 在两个代码片段中,虽然我更喜欢第一个,其中环境事务全部包含所有需要自动登记的对象,但我们不会偶然留下任何对象。
Important Difference
您可能需要注意是否要访问事务上下文之外的实体,因为这在选项 1 中是不可能的,但在选项 2 中不会成为问题
是的,顺序很重要。或者更确切地说,我们不能在不查看您的代码的情况下说这无关紧要。
DbConnection 实例将存在于环境事务中,如果它们在 Open()ed 时存在的话。
您的 DbContext 构造函数可能会打开底层 DbConnection,在这种情况下,两种模式不同。
第一个是正常模式,你应该坚持。
此外,如果您正在使用 SQL 服务器,请不要使用 TransactionScope 的默认构造函数。参见 Using new TransactionScope() Considered Harmful
这些代码有什么区别:
using (TransactionScope tran = new TransactionScope ())
{
using (Entities ent = new Entities())
{
和
using (Entities ent = new Entities())
{
using (TransactionScope tran = new TransactionScope ())
{
行顺序重要吗?
谢谢
在这种情况下没关系,因为 Entities
看起来像模型/数据 class,它不能/不需要加入交易,所以你可以有任何订单,它不会产生差异。现在,如果 Entities
操作中存在任何问题,Read / DML 事务也会中止,假设操作发生在环境事务上下文中,尽管 class / 对象像 IDBConnection
无论如何都会自动登记到事务中(前提是未设置为 false),但是即使 Connection 是在事务上下文之外创建的,也不会自动登记,需要显式登记事务上下文
In Short
对于您当前的代码,直到您处理需要事务登记的对象(如 IDBConnection
)之前,这并不重要。 在两个代码片段中,虽然我更喜欢第一个,其中环境事务全部包含所有需要自动登记的对象,但我们不会偶然留下任何对象。
Important Difference
您可能需要注意是否要访问事务上下文之外的实体,因为这在选项 1 中是不可能的,但在选项 2 中不会成为问题
是的,顺序很重要。或者更确切地说,我们不能在不查看您的代码的情况下说这无关紧要。
DbConnection 实例将存在于环境事务中,如果它们在 Open()ed 时存在的话。
您的 DbContext 构造函数可能会打开底层 DbConnection,在这种情况下,两种模式不同。
第一个是正常模式,你应该坚持。
此外,如果您正在使用 SQL 服务器,请不要使用 TransactionScope 的默认构造函数。参见 Using new TransactionScope() Considered Harmful