C# 如何找出EF更新中错误的确切原因?

C# 如何找出EF更新中错误的确切原因?,c#,entity-framework,C#,Entity Framework,我已经阅读了关于这一点的其他帖子,它们都没有解决我当前情况的答案,也没有类似的答案。我的场景在应用程序的每次运行中都是可复制的,尽管我似乎无法生成一段更小的代码来创建此错误 我得到以下错误: An exception has been raised that is likely due to a transient failure. If you are connecting to a SQL Azure database consider using SqlAzureExecutionStra

我已经阅读了关于这一点的其他帖子,它们都没有解决我当前情况的答案,也没有类似的答案。我的场景在应用程序的每次运行中都是可复制的,尽管我似乎无法生成一段更小的代码来创建此错误

我得到以下错误:

An exception has been raised that is likely due to a transient failure. If you are connecting to a SQL Azure database consider using SqlAzureExecutionStrategy.
内部的例外情况是:

A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)
我没有连接到SQL Azure数据库。通过VPN连接到远程数据库,托管在本地。为了提供更多的上下文,我从外部系统导入数据,每次数据到达特定记录时,在创建实体后尝试更新实体时总是失败。我已经尝试在EF中设置调试登录,并将它生成的语句复制到SSMS中,并使用相同的凭据运行它,没有错误。此记录与以前记录之间的唯一区别因素是审核字段(创建/修改的时间)和名称,该名称已从
1USD-保持99
更改为
1USD-保持100
。实际上,我测试了更改记录导入的顺序,在创建后在EF中编辑时,它总是在
100
失败,因此这里可能还有其他潜在问题。数据库中的字段本身正在处理长度大于此值的字符串,包括没有错误的相同进程

这显然不是一个暂时的故障,也不是一个连接问题,所以我如何找到这不起作用的确切原因呢

编辑:在下面添加一些代码。此外,我还注意到,如果我将名称更改为
1USD-Holding 99-Test 2
,则即使名称较长,它也可以正常工作。出于性能原因,未启用自动
变更检测

            security = new Security
            {
                Name = securityName,
                IsActive = true,
                CreatedAt = DateTime.Now,
                CreatedBy = ADMIN_USER,
                ModifiedAt = DateTime.Now,
                ModifiedBy = ADMIN_USER
            };

            _repository.Save(security); //Ctx.Set<T>().Add(security); Ctx.SaveChanges();

            //some attributes with a foreign key referencing this entity are saved, which is why we update audit fields below, but error occurs regardless if anything additional is saved

            security.ModifiedBy = ADMIN_USER;
            security.ModifiedAt = DateTime.Now;
            _repository.Save(security); //Ctx.Set<T>().Attach(security); Ctx.Entry(security).State = EntityState.Modified; Ctx.SaveChanges();
security=新安全性
{
Name=securityName,
IsActive=true,
CreatedAt=DateTime。现在,
CreatedBy=ADMIN\u用户,
ModifiedAt=DateTime。现在,
ModifiedBy=ADMIN\u用户
};
_保存(安全性)//Ctx.Set().Add(安全性);Ctx.SaveChanges();
//某些外键引用此实体的属性会被保存,这就是为什么我们会更新下面的审核字段,但无论是否保存任何其他内容,都会发生错误
security.ModifiedBy=ADMIN\u USER;
security.ModifiedAt=DateTime.Now;
_保存(安全性)//Ctx.Set().Attach(安全性);Ctx.Entry(security).State=EntityState.Modified;Ctx.SaveChanges();

编辑2:这显然不是连接问题,因为任何以3个字符组合结尾的东西都会出现连接问题,例如
A10
B10
10A
。1、2或4个字符似乎可以。但是,仍然不知道实际的问题是什么。

您能更新您的问题并向我们显示引发错误的代码段吗?@develInconnate添加了相关代码以及我所做的一些附加测试。您能显示与尝试保存相关的db上下文的位置吗?具体地说,我想知道与数据库上下文的连接是否真的存在,或者它是否已关闭?@develenvonate我们有一个IoC框架,它将
存储库
注入到保存这些记录的类中。
Repository
根据注入
Repository
的连接字符串解析新的
DbContext
。可能需要验证存储库是否具有有效连接