我在執行檢查時遇到問題,該問題會阻止開發人員在初始創建後手動或以編程方式更新代碼中的主鍵。實體框架OnChanging保護主鍵
partial class User
{
public User()
{
this.UserId = sGuid.NewSGuid(sGuidType.SequentialAtEnd);
}
partial void OnUserIdChanging(Guid value)
{
//throw if its an edit...
throw new DbEntityValidationException("Cannot mutate primary key");
}
}
如果我編輯/更新一個對象,但它實際上不會讓我首先創建一個新的實體也能正常工作。有沒有什麼辦法可以在這一點上查看它是一個新的實體還是現有的實體?
由於提前, 皮特
UPDATE:
典型的我總是找不到答案我張貼後-_-!謝謝你的回答,我會將你的一個人標記爲正確的答案,因爲他們是有效的選擇。如果您使用EF設計,在設計師只需選擇屬性,並設置相應的訪問修飾符在屬性網格
public class MyEntity
{
public int Id { get; private set; }
}
:
if (this.EntityState != System.Data.EntityState.Detached)
{
throw new DbEntityValidationException("Cannot mutate primary key");
}
那麼你可以用鍵查詢數據庫,如果它有一個編輯,如果沒有,它的一個新對象......或者我錯了什麼? – 2013-02-08 14:33:41
爲什麼不只是讓你的UserId setter是私人的? – 2013-02-08 14:36:36
我確實想到了這一點(只是將其設置爲私有),這是有效的。但是它不會阻止它們生成可以更新它的類方法。但是,我想這可能無法阻止他們完全取消支票。 在onChanging事件你只是得到新的價值,如果它被手動設置,你可能會碰到錯誤的記錄等 我想避免設置它爲私人的原因是因爲我已經使用自動代碼生成和它被破壞每次我更新模型>< – 2013-02-08 14:45:18