C# 实体框架更新失败,引发添加MS_描述属性的异常
我尝试使用以下代码更新对象:C# 实体框架更新失败,引发添加MS_描述属性的异常,c#,entity-framework,C#,Entity Framework,我尝试使用以下代码更新对象: using (var context = new ApplicationEntities()) { var entry = context.Entry(obj); entry.State = EntityState.Modified; context.SaveChanges(); } 但是,由于抛出以下异常,它在大多数情况下都会失败 更新条目时出错。看内在 细节例外。System.Data.Entity.Core.UpdateExceptio
using (var context = new ApplicationEntities())
{
var entry = context.Entry(obj);
entry.State = EntityState.Modified;
context.SaveChanges();
}
但是,由于抛出以下异常,它在大多数情况下都会失败
更新条目时出错。看内在
细节例外。System.Data.Entity.Core.UpdateException:一个
更新条目时出错。有关详细信息,请参见内部异常
详情。-->System.Data.SqlClient.SqlException:属性不能为空
补充。“ForeignKeyName”的属性“MS_Description”已存在。
声明已终止
这里,ForeignKeyName
是与其他表的外键关系的名称
我的问题是,为什么它试图为ForeignKeyName
添加MS\u Description
属性
我还尝试只更新对象的选择性属性(外键除外)。但是,它也会失败并抛出类似的异常。这种情况发生在生产环境中,在本地开发环境中也可以
更新:
我发现了主要问题。它既不涉及实体框架,也不涉及应用程序。我发现更新这个特定表的一行会触发一个触发器。触发器的定义非常错误,它试图为外键名添加MS_描述。我删除了特定的语句,它现在可以工作了。虽然不是EF,但一个可能的替代方法可能是使用(Dapper的抽象层) 使用Drapper,您可以提供SQL语句来更新记录,从而完全控制执行 您的更新方法可能类似于
public Model Update(Model model)
{
return _commander.Execute(model) ? model : null;
}
其中\u commander
是Drapper的IDBMander
的一个实例。这是您为EF编写的代码的一半,具有更多的控制
你应该去看看 虽然不是EF,但一个可能的替代方法可能是使用(Dapper的抽象层) 使用Drapper,您可以提供SQL语句来更新记录,从而完全控制执行 您的更新方法可能类似于
public Model Update(Model model)
{
return _commander.Execute(model) ? model : null;
}
其中\u commander
是Drapper的IDBMander
的一个实例。这是您为EF编写的代码的一半,具有更多的控制
你应该去看看 检查
MS\u Description
是否具有外键关系“MS\u Description”是表的扩展属性,而不是表的列请与数据库一起检查该列是否存在。检查MS\u Description
是否具有外键关系“MS\u Description”是表的扩展属性,而不是表的扩展属性表格的列请与数据库检查该列是否存在。