实体框架更新失败并抛出添加MS_Description属性的异常

本文关键字:MS Description 属性 异常 添加 更新 框架 失败 实体 | 更新日期: 2023-09-27 18:05:16

我尝试使用以下代码更新对象:

 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: Property cannot be补充道。属性"MS_Description"已经为"ForeignKeyName"存在。语句已被终止。

这里,ForeignKeyName是与其他表的外键关系的名称。

我的问题是为什么它试图为ForeignKeyName添加MS_Description属性。

我还尝试只更新对象的选择属性,除了外键。但是,它也会失败并抛出类似的异常。这种情况发生在生产环境中,在本地开发环境中没有问题。

更新:

我发现了主要问题。它既与实体框架无关,也与应用程序无关。我发现更新这个特定表的一行会触发一个触发器。触发器的定义非常错误,它试图为外键名添加MS_Description。我删除了特定的语句,现在它可以工作了。

实体框架更新失败并抛出添加MS_Description属性的异常

虽然不是EF,但一个可能的替代方案可能是使用Drapper (Dapper的抽象层)。

使用Drapper,您将提供SQL语句来更新记录,从而完全控制执行。

你的更新方法可能看起来像

public Model Update(Model model)
{
    return _commander.Execute(model) ? model : null;
}

其中_commander是Drapper的IDbCommander的实例。这是您为EF编写的代码的一半,并且具有更多的控制。

你应该去看看。