首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Transaction为Table<Transaction>类型时LINQ to SQL Transaction

Transaction为Table<Transaction>类型时LINQ to SQL Transaction
EN

Stack Overflow用户
提问于 2011-07-08 00:25:37
回答 1查看 1.2K关注 0票数 3

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

代码

代码语言:javascript
复制
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,但这是我第一次在多个调用周围使用事务,所以我也准备好接受这样的事实:我可能一开始就没有以正确的方式做这件事,而且冲突的表名甚至可能不是问题……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-08 00:30:17

如果来自DataContextTransaction属性被您的DbContext类隐藏,只需强制转换:

代码语言:javascript
复制
((DataContext) context).Transaction = trans;

这样,编译器就会将Transaction解析为DataContext.Transaction而不是DbContext.Transaction

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

代码语言:javascript
复制
DataContext vanillaContext = context;
vanillaContext.Transaction = trans;

(顺便说一句,我不知道这是否是使用事务的正确方法--这只是避免命名冲突的方法。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6613881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档