首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >精通细节,MVC模型层代码,更专业的方式

精通细节,MVC模型层代码,更专业的方式
EN

Stack Overflow用户
提问于 2011-12-29 17:47:44
回答 2查看 591关注 0票数 0

我正在尝试编写Asp.net模型中的主细节条目编辑。

朋友,让我向你展示我的两个模型类。

类名= Model\OrderDetailRepository.cs

代码语言:javascript
复制
public class OrderDetailRepository : IOrderDetailRepository
{
    NorthwindEntities DB = new NorthwindEntities();

    public IQueryable<Order_Detail> GetOrderDetailByOrderID(int OrderID)
    {
        return DB.Order_Details.Where(tableX => tableX.OrderID == OrderID);
    }

    public void InsertOrderDetail(Order_Detail _Order_Detail)
    {
        DB.Order_Details.AddObject(_Order_Detail);
    }


    public void UpdateOrderDetail(Order_Detail _Order_Detail)
    {
        DB.ObjectStateManager.ChangeObjectState(_Order_Detail, EntityState.Modified);
    }

    public void DeleteOrderDetailByOrderID(int OrderID)
    {
        Order_Detail  _Order_Detail = DB.Order_Details.SingleOrDefault(x => x.OrderID == OrderID);

        if (_Order_Detail != null)
            DB.Order_Details.DeleteObject(_Order_Detail);
    }

    public void DeleteOrderDetailByCurrentRecord(Order_Detail _Order_Detail)
    {
        DB.Order_Details.DeleteObject(_Order_Detail);
    }

    public void Commit()
    {
        DB.SaveChanges();
    }
}

类名= Model\OrderMasterReposity.cs

代码语言:javascript
复制
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();
    }
}

在上面所有代码之后,我需要从我的控制器类中调用这两个类。因此,让我们假设下面的代码我将在控制器层编写。

代码语言:javascript
复制
OrderMasterReposity _OrderMasterReposity = new OrderMasterReposity();
OrderDetailRepository _OrderDetailRepository = new OrderDetailRepository();
_OrderMasterReposity.InsertOrderMaster(new Order{....});
_OrderDetailRepository.InsertOrderDetail(new Order_Detail{....});
_OrderMasterReposity.Commit();
_OrderDetailRepository.Commit();

我的问题是我现在做的方式不是那么专业。

因为我需要多次调用提交函数。

所以,有没有人能给我更好的方式在模型层编码?

EN

回答 2

Stack Overflow用户

发布于 2011-12-29 17:55:40

您可以使用Unit of Work,请参阅此示例:

http://iridescence.no/post/ASPNET-MVC-DataContext-and-The-Unit-of-Work-Pattern.aspx

票数 1
EN

Stack Overflow用户

发布于 2011-12-29 19:32:47

最好的是你正确地实现了存储库模式

此外,没有订单,订单详细信息就没有意义,因此根据DDD,您不应该为order_detail定义单独的存储库。我会这样做

代码语言:javascript
复制
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表中保存数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8666195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档