当Transaction为类型Table <transaction> </transaction>时,LINQ to SQL事务

时间:2011-07-07 16:25:37

标签: c# linq-to-sql transactions

我正在尝试创建一个事务来包装几个LINQ to SQL SubmitChanges()调用。

代码

System.Data.Common.DbTransaction trans = null;

using (DbContext context = new DbContext())
{
    context.Connection.Open()
    trans = context.Connection.BeginTransaction();

    context.Transaction = trans; // <-- ERROR HERE: Cannot be done!

    .... // Several calls to delete objects with context.SaveChanges()

    trans.Commit();
}

问题

在我们的数据库架构中(它与我预先关联,并且与应用程序密切相关),我们有一个名为Transaction的表。

这意味着上面代码中的Transaction属性实际上不是IDbTransaction类型,我无法将trans对象分配给context.Transaction。 context.Transaction实际上是Table<Transaction>类型。

问题

如果我有一个名为Transaction的表当前不可更改的事实,我怎样才能将事务分配给我的上下文?

虽然我熟悉LINQ to SQL,但这是我第一次使用围绕多个呼叫的事务,所以我也准备好接受我可能不会以正确的方式做到这一点,并且冲突的表名甚至可能不是问题...

1 个答案:

答案 0 :(得分:2)

如果您的Transaction课程隐藏了DataContext的{​​{1}}属性,则只需投放:

DbContext

这样{/ 1}}由编译器解析为((DataContext) context).Transaction = trans; 而不是Transaction

或者你也可以使用一个单独的变量,如果你有几个这样的调用,那么它可能很有用:

DataContext.Transaction

(我不知道这是否是顺便使用事务的正确方法 - 它只是解决命名冲突的方法。)