1

錯誤消息:「存儲更新,插入或刪除語句影響了意外數量的行(0)。實體可能已被修改或刪除,因爲實體已加載。 ObjectStateManager條目「。EF:MVC:ASP:TPH錯誤 - 存儲更新,插入或刪除行數(0)。實體...修改或刪除...刷新ObjectStateManager

您好所有,

我創建了一個代碼第一次TPH(表每一個分層)內的MVC和EF與SQL緊湊分貝。

這裏的類圖/層次:

Class Diagram

客戶端和SalesRep的兩個繼承BaseUser類。關鍵是「用戶ID」,它的編碼與數據註釋[Key](我知道'ID'應該設置它以及)

這裏是我在哪裏:我可以播種數據庫的幾個條目。當我嘗試它似乎忽略它,只是應用的用戶ID按數字順序播種方法設置「用戶名」 ......(似乎沒給我嗎?)

此外,這裏是我的DbContext

public class SiteDB:DbContext 
{ 
    public DbSet<BaseUser> AllUsers { get; set; }//enable TPH 
    public DbSet<SalesRep> SalesReps { get; set; } 
    public DbSet<Client> Clients { get; set; } 
} 

接下來,

我已經創建了一個客戶端 - > ClientsController與強類型剃刀視圖控制器。有了這個。我現在爲客戶提供了一個CRUD。我可以毫無問題地創建新的客戶端,但是當我嘗試編輯客戶端條目時,出現上述錯誤消息。

我注意到一些有趣的事情,我跨過了代碼,db.SaveChanges();錯誤正在發生。

當客戶端傳回到ActionResult編輯方法時,UserID = 0!奇怪的?我不確定這是否是一個錯誤,或者如果這是一個真正的問題,導致這一點。

UserID=0

您對我們的幫助表示讚賞。謝謝!

+0

發表您的編輯方法的代碼? – Eranga

回答

0

要修改實體,您需要從數據庫中獲取它:當您在編輯操作中傳回修改後的值時,需要從db對象中檢索實體,通過ID獲取它,應用修改的值並保存它。

下面的例子:

public ActionResult Edit(int id, MyModel model){ 
using (SiteDBdb = new SiteDB()){ 
    Client cl = (from c in db.Clients where c.id == id select c).First(); 
    cl.MyProp = model.MyProp; 
    ... 
    db.SaveChanges(); 
} 
... 
} 
+0

我相信我正在那樣做。你能告訴我一個小代碼示例嗎? – GisMofx

+0

@GisMofx查看我編輯的答案 –

+0

如何處理已編輯的多個屬性?我也可以這樣做:_Client eclient = db.Clients.Find(id); _ – GisMofx

相關問題