具有关系表工作单元的通用存储库模式

Generic Respository Pattern with Unit of Work for tables in Relationship

据我所知,工作单元将所有存储库保存在管道中,稍后作为一个数据库事务推送。根据我的以下情况。

  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; }
  }

Class Order,被 OrderProductsDeliveryTrack 引用 在数据库中,记录没有插入 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;
    }
}
}

您不需要先插入客户。您需要做的就是创建客户并将客户添加到订单中,然后插入订单。所以这样的事情应该有效:

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();