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”是表的扩展属性,而不是表的扩展属性表格的列请与数据库检查该列是否存在。