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

时间:2016-09-02 12:06:39

标签: c# entity-framework

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

 using (var context = new ApplicationEntities())
 {
   var entry = context.Entry(obj);
   entry.State = EntityState.Modified;
   context.SaveChanges();
}

但是,它通过抛出以下异常大部分时间都失败了。

  

更新条目时发生错误。看到内心   细节例外。 System.Data.Entity.Core.UpdateException:An   更新条目时发生错误。查看内部异常   细节。 ---> System.Data.SqlClient.SqlException:属性不能   添加。 'ForeignKeyName'已存在属性'MS_Description'。       声明已经终止。

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

我的问题是为什么要为MS_Description添加ForeignKeyName属性。

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

更新

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

1 个答案:

答案 0 :(得分:0)

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

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

您的更新方法可能类似于

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

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

你应该检查一下。