我即将创建一个以UUID作为唯一键(不是主键)的应用程序表单。
我收到了错误:
类型' System.Data.Entity.Core.EntityCommandExecutionException'的例外情况发生在EntityFramework.SqlServer.dll中但未在用户代码中处理 附加信息:执行命令定义时发生错误。有关详细信息,请参阅内部异常。
连接字符串到DB:
namespace ApplicationForm.Models
{
public class FormsContext : DbContext
{
public FormsContext() : base("name=FormsContext")
{
}
public System.Data.Entity.DbSet<ApplicationForm.Models.Form> Forms { get; set; }
...
FormsContext.cs:
FormsContext->Forms->{id,uuid,first,last...}
数据库是这样的:
{{1}}
我不太确定这次发生了什么。有人会帮我解决这个问题吗?
修改/分辨率
我不确定如何检查内部异常,我对此做了一些研究。因此,当我在内部异常中阅读错误消息时,我可以解决我的问题。
我发现了这个bug是什么。查询字段是&#39; firstname&#39;但我的表格列名是“第一个”#。他们没有匹配。一旦我更改了DB列名称,它就再次运行。
答案 0 :(得分:13)
发现了什么错误。查询字段是'firstname'但我的表列名是'first'。他们没有匹配。一旦我更改了DB列名称,它就再次运行。
如果数据库始终处于不稳定状态,必须努力使每个人保持同步。
EF只是一组映射,一个及时的快照,以及这些映射是对表还是存储过程,都没关系。
对于列名称或外键约束的任何细微更改都可以对任何旧映射具有 ripple 效果,并且需要将它们重新映射/搭建到新结构中(一个或多个);否则因此来自旧映射的奇怪行为。
有时,这些影响可能会产生明显的错误,就像您发现的那样,甚至更隐蔽的非明显的逻辑错误,这些错误可以为工作(编译)软件提供微妙的逻辑错误。 我已经看到了经验中的逻辑错误,它们确实发生了。
因此始终要小心保持EF映射同步。
我回答了一个不同的EF问题,但也是如此。
我遇到过这种情况,在EF中,运行时映射的存储过程失败,因为存储过程中的内部更改看到sql cast
已从中删除了列名结果,EF(在更改之前映射)失败。我的答案中有一个屏幕截图,显示EF / db更改会产生有害影响:
答案 1 :(得分:5)
答案 2 :(得分:0)
以防万一这对某人有帮助-我看到了此错误消息。事实证明,我已经更改了与EF模型关联的数据库,并且没有正确设置连接字符串。