我正在尝试创建一个事务来围绕几个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,但这是我第一次在多个调用周围使用事务,所以我也准备好接受这样的事实:我可能一开始就没有以正确的方式做这件事,而且冲突的表名甚至可能不是问题……
发布于 2011-07-08 00:30:17
如果来自DataContext的Transaction属性被您的DbContext类隐藏,只需强制转换:
((DataContext) context).Transaction = trans;这样,编译器就会将Transaction解析为DataContext.Transaction而不是DbContext.Transaction。
或者,您可以使用一个单独的变量,如果您有几个这样的调用,那么这个变量可能会很有用:
DataContext vanillaContext = context;
vanillaContext.Transaction = trans;(顺便说一句,我不知道这是否是使用事务的正确方法--这只是避免命名冲突的方法。)
https://stackoverflow.com/questions/6613881
复制相似问题