好吧,所以迟到了,我累了,但这不应该发生......或者我相信。我有一个按钮点击事件处理程序的代码,我从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();'? –