gpt4 book ai didi

c# - 当事务类型为 Table 时的 LINQ to SQL 事务

转载 作者:行者123 更新时间:2023-11-30 17:17:16 26 4
gpt4 key购买 nike

我正在尝试创建一个事务来环绕多个 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,但这是我第一次使用围绕多个调用的事务,所以我也准备好接受我一开始可能没有以正确的方式做这件事,并且冲突的表名甚至可能不是问题......

最佳答案

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

((DataContext) context).Transaction = trans;

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

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

DataContext vanillaContext = context;
vanillaContext.Transaction = trans;

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

关于c# - 当事务类型为 Table<Transaction> 时的 LINQ to SQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com