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
。可能需要验证存储库是否具有有效连接