具有关系表工作单元的通用存储库模式
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
,被 OrderProducts
和 DeliveryTrack
引用
在数据库中,记录没有插入 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();
据我所知,工作单元将所有存储库保存在管道中,稍后作为一个数据库事务推送。根据我的以下情况。
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
,被 OrderProducts
和 DeliveryTrack
引用
在数据库中,记录没有插入 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();