2014-03-26 82 views
0

我想更新一個實體,但是當我打電話保存更改沒有任何反應。以下是我如何附加實體的代碼。我使用EF6.1和MVC5.1的方式附加實體沒有更新

var entity = db.Entity.Attach(existingEntity); 
entity = new Entity(args0, args1, args2) 
entity.Id = existingEntity.Id; 
db.SaveChanges() 

這裏的實體類:我並設置屬性

public class Entity : Entity 
{ 
    public int Id { get; set; } 

    public string PropertyA { get; private set; } 
    public string PropertyB { get; private set; } 
    public string PropertyC { get; private set; } 
} 

public Entity(string args0, string args1, string args2) 
{ 
     this.PropertyA = args0; 
     this.PropertyB = args1; 
     this.PropertyC = args2; 
} 

注意設定裝置私人因爲我有內部的一些內部工作類。我在想,EF無法更新實體的原因是因爲我實例化了一個新的實體,儘管我設置了它的主鍵。我也嘗試將狀態更改爲修改狀態,但它只是運行「更新腳本」,但它並不真實反映我對每個屬性所做的更改

此場景的任何可能的解決方案?

回答

0

我是MVC和EF的新手。但是在這裏。

您是不是使用私人設置混合您的DAL和BLL?

另外,如果您已經擁有現有的實體,爲什麼不能直接更新實體的屬性?您的課程設置的方式只能創建,而不能修改。

最後,我認爲你必須明確告訴EF existingEntity已被修改。

+0

嗯,據我讀我的代碼沒有我不混合這兩個。你是對的,這個班只是爲了創造而建造的,我認爲這是我的錯誤。我這樣做是因爲有些屬性的計算,需要一些參數以外的參數加上,因爲我需要它有自動計算(帶參數) – gnaungayan

0
var entity = new Entity(args0, args1, args2) 
entity.Id = existingEntity.Id; 
db.Entity.Attach(entity); 
db.SaveChanges(); 
+0

你可以給一個描述嗎? – bjb568

+0

這將拋出一個異常說不能超過跟蹤2個相同的對象鍵,我相信當你附加一個實體的狀態是未修改 – gnaungayan