LINQ to SQL Transaction,当Transaction类型为Table
本文关键字:Transaction Table 类型 to SQL LINQ | 更新日期: 2023-09-27 18:01:23
我试图创建一个事务来包装几个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();
}
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,但这是我第一次在多个调用中使用Transaction,所以我也准备接受我可能没有正确的方式来做这件事,并且冲突的表名甚至可能不是一个问题…
标题>如果DataContext
的Transaction
属性被您的DbContext
类隐藏,只需转换:
((DataContext) context).Transaction = trans;
这样Transaction
就会被编译器解析为DataContext.Transaction
而不是DbContext.Transaction
。
或者,您可以使用一个单独的变量,这可能是有用的,如果您有几个这样的调用:
DataContext vanillaContext = context;
vanillaContext.Transaction = trans;
(我不知道这是否是使用事务的正确方式-它只是绕过命名冲突的方法)