我正在尝试创建一个事务来包装几个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,但这是我第一次使用围绕多个呼叫的事务,所以我也准备好接受我可能不会以正确的方式做到这一点,并且冲突的表名甚至可能不是问题...
答案 0 :(得分:2)
如果您的Transaction
课程隐藏了DataContext
的{{1}}属性,则只需投放:
DbContext
这样{/ 1}}由编译器解析为((DataContext) context).Transaction = trans;
而不是Transaction
。
或者你也可以使用一个单独的变量,如果你有几个这样的调用,那么它可能很有用:
DataContext.Transaction
(我不知道这是否是顺便使用事务的正确方法 - 它只是解决命名冲突的方法。)