Używam asp.net mvc dla aplikacji. Podałem kilka wskazówek z serii Rob Conery'ego na stronie sklepu MVC. Używam bardzo podobnego wzorca dostępu do danych do tego, którego używał w sklepie.Aktualizacja Linq do SQL nie działa przy użyciu wzorca repozytorium
Dodałem jednak niewielką różnicę do wzoru. Każda klasa, którą utworzyłem w moim modelu ma właściwość o nazwie IsNew. Celem tego jest umożliwienie mi określenia, czy powinienem wstawiać lub aktualizować w bazie danych.
Oto niektóre kodu:
W moim kontrolera:
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);
}
A potem w 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();
}
Gdybym zmienić kod kontrolera, tak aby dbOrder.IsNew = true ; następnie kod działa, a wartości są wstawiane poprawnie.
Jednakże, jeśli ustawię dbOrder.IsNew = false; wtedy nic się nie dzieje ... nie ma błędów - po prostu nie aktualizuje zamówienia.
Używam DebuggerWriter tutaj: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 do śledzenia SQL, który jest generowany, i zgodnie z oczekiwaniami, kiedy wartość IsNew jest prawdziwa, Insert SQL jest generowany i wykonywany poprawnie. Jednakże, gdy IsNew ma wartość false, wydaje się, że nie ma generowanego kodu SQL, więc nic nie jest wykonywane.
Sprawdziłem, że problem tutaj (LINQ not updating on .SubmitChanges()) nie jest problemem.
Każda pomoc jest doceniana.