2017-02-16 68 views
0

據我所知,Unit Of Work將所有倉庫保存在管道中,並稍後作爲一個數據庫事務處理。根據我的下面的情況。通用倉庫模式與關係表中的工作單元

public class Customer 
    { 
    [Key] 
    public int Id { get; set; } 
    public string CustomerId { get; set; } 
    public string Name { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Address { get; set; } 
    public bool IsActive { get; set; } 
    } 

    public class Order 
    { 
    [Key] 
    public int Id { get; set; } 
    [ForeignKey("Customer")] 
    public int CustomerId { get; set; } 
    [ForeignKey("PaymentMode")] 
    public int PayModeId { get; set; } 
    public DateTime OrderDate { get; set; } 
    public bool IsActive { get; set; } 

    public Customer Customer { get; set; } 
    public PaymentMode PaymentMode { get; set; } 
    } 



    public class OrderProducts 
    { 
    [Key] 
    public int Id { get; set; } 
    [ForeignKey("Order")] 
    public int OrderId { get; set; } 
    [ForeignKey("Products")] 
    public int ProductId { get; set; } 
    public int Quantity { get; set; } 

    public Order Order { get; set; } 
    public Products Products { get; set; } 
    } 

public class DeliveryTrack 
{ 
    [Key] 
    public int Id { get; set; } 
    [ForeignKey("Order")] 
    public int OrderId { get; set; } 
    [ForeignKey("DeliveryStatus")] 
    public int DelStatusId { get; set; } 
    public float TotalAmount { get; set; } 
    public bool IsActive { get; set; } 

    public Order Order { get; set; } 
    public DeliveryStatus DeliveryStatus { get; set; } 
    } 

Order類,是由OrderProductsDeliveryTrack 在DB記錄引用未插入的OrderProducts但它插入用於DeliveryTrack。如果DeliveryTrack被排除在外,如果我說

ObjUow.GetRepository<OrderProducts>().Insert(objOrderProducts); 
ObjUow.Save(); 

它的工作。 Order是否有任何問題被2個實體引用。

請幫忙。

public int AddOrderDetailsOms(CustomerDto customerDto,PaymentModeDto 
paymentDto, OrderProductsDto orderProductsDto)   
{ 
    using (var dbContextTransaction = ObjUow.BeginDataTransaction()) 
    { 
    try 
    { 
     Customer objCustomer = new Customer 
     { 
      // CustomerId = customerDto.CustomerId, 
      Name = customerDto.Name, 
      Address = customerDto.Address, 
      PhoneNumber = customerDto.PhoneNumber, 
      IsActive = true 
     }; 

     Order objOrder = new Order 
     { 
      OrderDate = DateTime.Now, 
      IsActive = true, 
      PayModeId = paymentDto.Id, 
      Customer = objCustomer 
     }; 



     if (orderProductsDto != null) 
     { 
      foreach (var prodId in orderProductsDto.ProductId) 
      { 
       OrderProducts objOrderProducts = new OrderProducts 
       { 
        // OrderId = orderId, 
        ProductId = prodId, 
        Quantity = 1, 
        Order = objOrder 
       }; 

      } 
     } 

     DeliveryTrack objDeliveryTrack = new DeliveryTrack 
     { 
      // OrderId = orderId, 
      DelStatusId = 1, 
      TotalAmount = 120.00f, 
      Order = objOrder 
     }; 

     ObjUow.GetRepository<DeliveryTrack>().Insert(objDeliveryTrack); 
     ObjUow.Save(); 

     dbContextTransaction.Commit(); 
     return 1; 
    } 
    catch (Exception ex) 
    { 
     dbContextTransaction.Rollback(); 
     throw ex; 
    } 
} 
} 

回答

1

您不需要先插入客戶。您所需要做的就是創建客戶並將客戶添加到訂單中,然後插入訂單。所以像這樣的東西應該工作:

Customer objCustomer = new Customer 
{ 
    CustomerId = customerDto.CustomerId, 
    Name = customerDto.Name, 
    Address = customerDto.Address, 
    PhoneNumber = customerDto.PhoneNumber, 
    IsActive = true 
}; 

Order objOrder = new Order 
{ 
    OrderDate = DateTime.Now, 
    IsActive = true, 
    PayModeId = paymentDto.Id, 
    Customer = objCustomer 
}; 
ObjUow.GetRepository<Order>().Insert(objOrder); 
ObjUow.Save(); 
+0

這很好,garethb,非常感謝,它工作得很好。 – Chinmay

+0

僅供參考,我在猜測您的存儲庫Insert()調用DBContext.Add()時,Add()方法將正確更新您的整個對象圖並按正確的順序。所以你也可以做同樣的付款。如果以其他方式進行,並向客戶添加訂單列表並插入客戶,它仍然有效。 – garethb

+0

感謝信息garethb,我會檢查。請幫助我解決瓶頸問題。 – Chinmay