我正在使用asp.net mvc的应用程序。我已经从Rob Conery的MVC店面系列中获得了一些指导。我正在使用他在店面中使用的非常类似的数据访问模式。Linq到SQL更新不起作用使用存储库模式
但是,我在模式中添加了一个小的差异。我在模型中创建的每个类都有一个名为IsNew的属性。这样做的目的是让我指定是否应该在数据库中插入或更新。
下面是一些代码:
在我的控制器:
OrderService orderService = new OrderService();
Order dbOrder = orderService.GetOrder(ID);
if (ModelState.IsValid)
{
dbOrder.SomeField1 = "Whatever1";
dbOrder.SomeField2 = "Whatever2";
dbOrder.DateModified = DateTime.Now;
dbOrder.IsNew = false;
orderService.SaveOrder(dbOrder);
}
然后在SQLOrderRepository:
public void SaveOrder(Order order)
{
ORDER dbOrder = new ORDER();
dbOrder.O_ID = order.ID;
dbOrder.O_SomeField1 = order.SomeField1;
dbOrder.O_SomeField2 = order.SomeField2;
dbOrder.O_DateCreated = order.DateCreated;
dbOrder.O_DateModified = order.DateModified;
if (order.IsNew)
db.ORDERs.InsertOnSubmit(dbOrder);
db.SubmitChanges();
}
如果我改变控制器代码,以便dbOrder.IsNew =真;然后代码工作,并正确插入值。
但是,如果我设置了dbOrder.IsNew = false;那么没有任何反应......没有错误 - 它只是不更新订单。
我在此处使用DebuggerWriter:http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11来跟踪正在生成的SQL,并且如预期的那样,当IsNew值为true时,会生成并正确执行Insert SQL。但是,当IsNew设置为false时,似乎没有生成SQL,因此不执行任何操作。
我验证了这里的问题(LINQ not updating on .SubmitChanges())不是问题。
任何帮助表示赞赏。