2016-09-02 16 views
1

我試着用下面的代碼更新對象:實體框架更新失敗,並引發加MS_Description屬性的例外

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:添加的屬性不能爲 。屬性'MS_Description'已經存在於'ForeignKeyName'中。 該聲明已被終止。

這裏,ForeignKeyName是與其他表的外鍵關係的名稱。

我的問題爲什麼它試圖爲ForeignKeyName添加MS_Description屬性。

我也試過只更新對象的選擇性屬性,除了外鍵。但是,它也失敗並拋出類似的例外。這種情況發生在生產環境中,在當地的開發環境中也是如此。

更新:

我發現的主要問題。它既不涉及實體框架,也不涉及應用。我發現更新這個特定表的一行觸發了一個觸發器。觸發器的定義是非常錯誤的,它試圖爲外鍵名稱添加MS_Description。我刪除了特定的聲明,現在它可以工作。

+0

檢查'MS_Description'是否有外鍵關係 –

+0

'MS_Description'是表的擴展屬性,它不是表 – rksajib

+1

的列,請與數據庫檢查該列是否存在。 –

回答

0

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

使用Drapper,您可以提供SQL語句來更新記錄,以便完全控制執行。

您的更新方法可能看起來像

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

哪裏_commander是Drapper的IDbCommander的一個實例。這是您爲EF編寫的代碼的一半,並且擁有更多的控制權。

你應該檢查出來。