实体框架崩溃

时间:2011-03-16 15:22:34

标签: asp.net-mvc entity-framework-4

我正在开发一个MVC应用程序,而且我不清楚保存这些实体的理想方法。我现在正在做什么,但至少可以说是讨厌的。

我的操作方法使用ViewModels并使用Automapper将它们映射到相关实体。我的实体是Requestor,Order和OrderDetail。

显然,SaveChanges方法的所有这些问题都是错误的,但是我一直在讨论添加新子项而不是更新其中的问题。

任何有关此代码外观的帮助都会非常感激。

Jason MacKenzie

 [HttpPost]
    public ActionResult Edit(FormCollection formValues, RequestorViewModel requestor, OrderViewModel order, List<OrderDetailViewModel> OrderDetails)
    {

        var query = from r in db.Requestors
                    where r.RequestorID == requestor.RequestorID
                    select r;
        var req = query.SingleOrDefault();

        var orderQuery = from o in db.Orders
                         where o.RequestorID == requestor.RequestorID
                         select o;
        var or = orderQuery.SingleOrDefault();


        List<OrderDetail> orDet = db.OrderDetails.Where(od => od.OrderID == or.OrderID).ToList();


        Mapper.CreateMap<RequestorViewModel, Requestor>();
        req = Mapper.Map<RequestorViewModel, Requestor>(requestor);

       Mapper.CreateMap<OrderViewModel, Order>();
       or = Mapper.Map<OrderViewModel, Order>(order);

       Mapper.CreateMap<OrderDetailViewModel, OrderDetail>();
       orDet = Mapper.Map<List<OrderDetailViewModel>, List<OrderDetail>>(OrderDetails);

       foreach (OrderDetail od in orDet)
       {
           db.OrderDetails.ApplyCurrentValues(od);
           db.SaveChanges();

       }

        db.Requestors.ApplyCurrentValues(req);
        db.SaveChanges();

        db.Orders.ApplyCurrentValues(or);
        db.SaveChanges();



        return View("Index");
    }

1 个答案:

答案 0 :(得分:0)

首先,您可以清理一下您的查询。

var req = (from r in db.Requestors
                where r.RequestorID == requestor.RequestorID
                select r).SingleOrDefault();

var or = (from o in db.Orders.Include("OrderDetails")
                     where o.RequestorID == requestor.RequestorID
                     select o).SingleOrDefault();

看看.Include如何映射所有相关数据。这非常有用。

您也应该只需要调用一次SaveChanges()。