2015-06-21 50 views
1

我有一個屬性,在我的實體上是必需的。在將實體添加到數據庫後,該屬性由系統填充。從這裏開始,這個屬性不應該改變。該屬性也永遠不會傳遞給客戶端。更新時需要屬性EF6

所以,現在當用戶編輯這個實體,並將其傳遞給我的服務層時,該屬性爲空。是否有可能告訴EF,在調用SaveChangesAsync之前,不應該修改此屬性,也不要更新,或者是我唯一的選擇,從數據庫檢索值並使用相同的值填充編輯的實體?

這裏是只有屬性標識和名稱被傳遞到客戶端我的實體

public myEntity() { 
    public long Id { get; set; } 

    public string Name { get; set; } 

    public string SystemProperty { get; set; } 
} 

的例子。當AddAsync在我的服務中調用時,我自己填充SystemProperty。

這裏是我的UpdateAsync,這使的DbContext扔

SystemProperty的例外是必需的

public override Task<int> UpdateAsync(Module updated) 
{ 
    _context.Modules.Attach(updated); 

    // do not update 
    _context.SetModified(updated, "SystemProperty", false); 

    return _context.SaveChangesAsync(); 
} 

我SetModified之法一直反對我的DbContext創建,所以我可以單元測試方法。如你所見,我以爲我可以使用IsModified = false,但似乎並沒有忽略這個屬性。

我有什麼選擇?

回答

1

最好的解決方法,我知道:

entity.Property = "placeholder"; 

var entry = _context.Entry(entity); 
entry.State = EntryState.Modified; 
entry.Property(m => m.Property).IsModified = false; 

_context.SaveChanges(); 

您標記實體修改,然後排除不修改的屬性。至於驗證,您需要爲該字段設置有效值才能通過驗證。

+0

我認爲殘疾人驗證領域是我缺少的。你知道該怎麼做嗎?你可以禁用它僅用於更新嗎? – Gillardo

+0

已更新的答案。 – ranquild

+0

想想我可能會從數據庫中獲取實體並填充屬性,那麼它將是正確的,我可以對所有其他字段進行驗證。如果我可以關閉對單個字段的驗證,我會很高興,但不知道關閉它的句號。 – Gillardo