下面提供了前一个版本和问题作为补充背景。改进后的问题陈述和问题如下:
也就是说,我想做类似于EF 6.n教程这里所描述的内容。一些示例代码可能如下:
在示例中,还有其他方法来创建共享连接和事务,但是如上所述,罪魁祸首似乎是如果我在前一个片段中提供连接字符串(“…”部分)作为
我不确定是否只是阅读了错误的来源,或者在尝试跨多个EF上下文共享事务时是否还有其他问题。该如何完成?
我阅读了许多其他SO帖子(例如,这个),以及一些教程。它们没有帮助。
我遇到了一个奇怪的问题,看起来我没有像其他教程和帖子中定义的构造函数重载。也就是说,根据链接教程的链接,我无法编写
然后,如果我写
我正在使用.NET 4.5.2和EF 6.1.0。我已经从现有数据库构建了
- 如何在EF 6.1.0数据库优先和.NET 4.5.2中在多个上下文之间共享事务,而不进行分布式事务?
也就是说,我想做类似于EF 6.n教程这里所描述的内容。一些示例代码可能如下:
int count1;
int count2;
using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
//How to define this connection so as not to run into UnintentionalCodeFirstException?
//Creating a dummy context to obtain the connectiong string like so
//dummyContext.Database.Connection.ConnectionString and then using the connection will be greeted with the aforementioned exception.
using(var conn = new SqlConnection("..."))
{
using(var c1 = new SomeEntities(conn, contextOwnsConnection: false))
{
//Use some stored procedures etc.
count1 = await c1.SomeEntity1.CountAsync();
}
using(var c2 = new SomeEntities(conn, contextOwnsConnection: false))
{
//Use some stored procedures etc.
count2 = await c2.SomeEntity21.CountAsync();
}
}
}
int count = count1 + count2;
在示例中,还有其他方法来创建共享连接和事务,但是如上所述,罪魁祸首似乎是如果我在前一个片段中提供连接字符串(“…”部分)作为
dummyContext.Database.Connection.ConnectionString
,我将只得到异常。
我不确定是否只是阅读了错误的来源,或者在尝试跨多个EF上下文共享事务时是否还有其他问题。该如何完成?
我阅读了许多其他SO帖子(例如,这个),以及一些教程。它们没有帮助。
我遇到了一个奇怪的问题,看起来我没有像其他教程和帖子中定义的构造函数重载。也就是说,根据链接教程的链接,我无法编写
new BloggingContext(conn, contextOwnsConnection: false))
并使用共享连接和外部事务。然后,如果我写
public partial class SomeEntities: DbContext
{
public SomeEntities(DbConnection existingConnection, bool contextOwnsConnection): base(existingConnection, contextOwnsConnection) { }
}
当我像教程中那样使用它时,从以下T4模板生成的代码的下一行中会出现异常。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
我正在使用.NET 4.5.2和EF 6.1.0。我已经从现有数据库构建了
edmx
并从那里生成了代码。在这种特定情况下,我使用Task Parallel线程加载数十个SQL Server 主数据服务暂存表(是的,一个大模型),并调用相关过程(由MDS提供每个表一个)。MDS有自己的补偿逻辑,以防某些表格的暂存失败,但回滚事务也应该可行。只是看起来我的EF出了一些(奇怪的)问题。
<添加: Steve建议使用直接的TransactionScope。没有共享连接就需要分布式事务,这不是我能选择的选项。然后,如果我尝试为上下文提供共享连接(一些选项显示在教程中,其中一个在此处),我会遇到“缺少构造函数”的问题。当我定义一个时,我得到我在代码中提到的异常。总之,这感觉相当奇怪。也许我在如何生成DbContext
和相关类方面存在问题。
<注1: 看起来根本原因就像Arthur(EF开发团队的成员)在这篇博客文章中所述。也就是说,在基于数据库的开发中,框架寻找在连接字符串中定义的类关系映射。我的连接字符串中有一些可疑之处..?