【问题标题】:LINQ to SQL Transaction when Transaction is type Table<Transaction>Transaction 类型为 Table<Transaction> 时的 LINQ to SQL Transaction
【发布时间】:2011-07-07 16:25:36
【问题描述】:

我正在尝试创建一个事务来环绕多个 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&lt;Transaction&gt; 类型。

问题

鉴于当前不可更改的事实,我有一个名为 Transaction 的表,如何将事务分配给我的上下文?

虽然我熟悉 LINQ to SQL,但这是我第一次在多个调用中使用事务,所以我也准备好接受我一开始可能没有以正确的方式执行此操作,并且冲突的表名甚至可能不是问题......

【问题讨论】:

    标签: c# linq-to-sql transactions


    【解决方案1】:

    如果 DataContext 中的 Transaction 属性被 DbContext 类隐藏,只需强制转换:

    ((DataContext) context).Transaction = trans;
    

    这样Transaction 被编译器解析为DataContext.Transaction 而不是DbContext.Transaction

    或者,您可以使用单独的变量,如果您要进行多个此类调用,这可能会很有用:

    DataContext vanillaContext = context;
    vanillaContext.Transaction = trans;
    

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

    【讨论】:

    • 该死!我有一种感觉,它是这样的,我曾尝试将它转换为我的 DbContext 类型,但我并没有意识到它需要转换为基本类型。完美运行,谢谢! (PS——下次能不能快一点?)
    猜你喜欢
    • 2022-12-27
    • 1970-01-01
    • 2021-11-09
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多