使用EF在MVC应用程序中发生System.Data.Entity.Core.EntityCommandExecutionException
我即将创建一个以UUID作为其唯一密钥(不是主键)的应用程序表单。
我收到了错误:
EntityFramework.SqlServer.dll中出现“System.Data.Entity.Core.EntityCommandExecutionException”类型的exception但未在用户代码中处理附加信息:执行命令定义时发生错误。 有关详细信息,请参阅内部exception
连接字符串到DB:
connectionString="Data Source=(localdb)\v11.0; Initial Catalog=FormsContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|Forms.mdf" providerName="System.Data.SqlClient"
FormsContext.cs:
namespace ApplicationForm.Models { public class FormsContext : DbContext { public FormsContext() : base("name=FormsContext") { } public System.Data.Entity.DbSet Forms { get; set; } ...
数据库是这样的:
FormsContext->Forms->{id,uuid,first,last...}
我不太确定这次发生了什么。 有人会帮我解决这个问题吗?
编辑/分辨率
我不知道如何检查内部exception,我对此做了一些研究。 因此,当我在内部exception中读取错误消息时,我可以解决我的问题。
我发现了这个bug是什么。 查询字段是’firstname’但我的表列名是’first’。 他们不匹配。 一旦我更改了DB列名称,它就再次运行了。
发现了什么错误。 查询字段是’firstname’但我的表列名是’first’。 他们不匹配。 一旦我更改了DB列名称,它就再次运行了。
如果数据库始终处于不稳定状态,必须努力使每个人保持同步。
为什么?
EF只是一组映射,一个及时的快照,以及这些映射是对表还是存储过程,都没关系。
对于列名称或外键约束的任何细微更改都可能对任何旧映射产生连锁反应 ,并且需要将其重新映射/搭建到新结构中; 否则因此来自旧映射的奇怪行为。
有时,这些影响可能会产生明显的错误,如您发现的甚至更隐蔽的非明显的逻辑错误,这些错误可以为工作(编译)软件提供微妙的逻辑错误。 我已经看到了经验中的逻辑错误,它们确实发生了。
所以要始终保持警惕,以保持EF映射同步。
我回答了一个不同的EF问题,但也是如此。
我遇到过一种情况,即在EF中,运行时映射的存储过程失败,因为存储过程中的内部更改发现sql强制转换已从结果中删除了列名,而EF(在更改之前映射)失败。 我的答案中有一个屏幕截图,显示EF / db更改会产生有害影响:
数据阅读器不兼容。 成员在数据读取器中没有具有相同名称的相应列
在我的情况下帮助下一个:
1)按View Detail..
按钮:
2)检查您的实际错误:
希望它对某人有帮助。