好吧,所以遲到了,我累了,但這不應該發生......或者我相信。我有一個按鈕點擊事件處理程序的代碼,我從Web表單創建一個新客戶。實體框架在沒有我調用AddToObject()的情況下插入行?
int customerId = <from_somewhere_doesnt_matter>;
Customer cust;
if (int.TryParse(Request.QueryString["cid"], out customerId)) {
// update existing customer
cus = db.Customers.Single(c => c.CustomerId == customerId);
cus.UpdatedByUser = user;
cus.Updated = DateTime.Now;
}
else {
// create new customer
cus = new Customer();
cus.InsertedByUser = user;
cus.Inserted = DateTime.Now;
}
SetFields(cus);
db.SaveChanges();
SetFields()方法只是從相應的Web表單域填充客戶的不同屬性。
我一直在生產中運行此代碼很長一段時間,它一直工作正常。但是,最近一位用戶告訴我,添加新用戶無效(不經常發生)。我檢查了它,果然,我填寫了表單並試圖添加用戶,但是隻是重定向回用戶列表,沒有任何錯誤消息,也沒有新用戶。
我檢查了代碼,並且意識到我忘記了在添加新用戶時添加了db.Users.AddObject(usr)。我添加了方法調用,並且用戶被正確添加。然後,我去了客戶代碼,只是爲了檢查如何以及何時在那裏調用AddObject方法,事實證明我不知道!
我可能會失明,但我搜索了源代碼,並且我沒有在任何地方調用該方法,它仍然可以添加一個客戶!我能想到的唯一的事情就是添加了客戶,因爲它引用了另一個對象(當前用戶),並以某種方式觸發了添加。用戶不依賴任何其他字段。
發生了什麼!?
在此先感謝!
這是確切的代碼? ESP。 'cus = new Customer();'? –