C# 掌握细节,MVC模型层代码,为更好的专业方式

C# 掌握细节,MVC模型层代码,为更好的专业方式,c#,asp.net,asp.net-mvc-3,entity-framework-4,crud,C#,Asp.net,Asp.net Mvc 3,Entity Framework 4,Crud,我正在尝试在Asp.net MVC模型中编写主详细信息条目编辑。 首先,让我向你们展示我的两个模型类 类名=Model\OrderDetailRepository.cs 我的问题是我现在的工作方式不太专业。 因为我需要多次调用提交函数。 那么,有谁能给我一个更好的方法来在模型层编码吗?您可以使用工作单元,请参见以下示例: 最好的事情是正确地实现存储库模式 此外,订单详细信息没有订单就没有意义,因此根据DDD,您不应该为订单详细信息定义单独的存储库。我会这样做 Order _order = Ord

我正在尝试在Asp.net MVC模型中编写主详细信息条目编辑。
首先,让我向你们展示我的两个模型类

类名=Model\OrderDetailRepository.cs 我的问题是我现在的工作方式不太专业。
因为我需要多次调用提交函数。

那么,有谁能给我一个更好的方法来在模型层编码吗?

您可以使用工作单元,请参见以下示例:


最好的事情是正确地实现存储库模式
此外,订单详细信息没有订单就没有意义,因此根据DDD,您不应该为订单详细信息定义单独的存储库。我会这样做

Order _order = OrderMasterRepository.GetOrder(orderID);
_order.Property1 = value1;
_order.Property2 = value2;
_order.Property3 = value3;
foreach(var orderDetail in _order.OrderDetails)
{
   orderDetail.Property1 = avalue1;
   orderDetail.Property2 = avalue2;
   .
   .
} 
OrderMasterRepository.Commit();
上述语句将在order和orderDetail表中保存数据

public class OrderMasterReposity : IOrderMasterRepository
{
    NorthwindEntities DB = new NorthwindEntities();

    public IQueryable<Order> GetOrderMasterByOrderID(int OrderID)
    {
        return DB.Orders.Where(tableX => tableX.OrderID == OrderID);   
    }

    public void InsertOrderMaster(Order _Order)
    {
        DB.Orders.AddObject(_Order);
    }

    public void UpdateOrderMaster(Order _Order)
    { 
        DB.ObjectStateManager.ChangeObjectState(_Order,  EntityState.Modified);
    }

    public void DeleteOrderMaster(int OrderID)
    { 
        Order _Order = DB.Orders.SingleOrDefault(x => x.OrderID == OrderID);

        if (_Order != null)
            DB.Orders.DeleteObject(_Order);            
    }

    public void Commit()
    {
        DB.SaveChanges();
    }
}
OrderMasterReposity _OrderMasterReposity = new OrderMasterReposity();
OrderDetailRepository _OrderDetailRepository = new OrderDetailRepository();
_OrderMasterReposity.InsertOrderMaster(new Order{....});
_OrderDetailRepository.InsertOrderDetail(new Order_Detail{....});
_OrderMasterReposity.Commit();
_OrderDetailRepository.Commit();
Order _order = OrderMasterRepository.GetOrder(orderID);
_order.Property1 = value1;
_order.Property2 = value2;
_order.Property3 = value3;
foreach(var orderDetail in _order.OrderDetails)
{
   orderDetail.Property1 = avalue1;
   orderDetail.Property2 = avalue2;
   .
   .
} 
OrderMasterRepository.Commit();