0
私の知る限り、ユニット・オブ・ワークはすべてのリポジトリをパイプラインに保存し、後で1つのデータベース・トランザクションとしてプッシュします。私の下のシナリオに従って。リレーションシップのテーブルの作業単位を使用する汎用リポジトリ・パターン
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
は、OrderProducts
ために挿入されていないが、それはDeliveryTrack
ために挿入されたDBレコードにOrderProducts
とDeliveryTrack
によって参照されます。 DeliveryTrack
が除外され、むしろ私が言う場合
ObjUow.GetRepository<OrderProducts>().Insert(objOrderProducts);
ObjUow.Save();
それは働いています。 2つのエンティティによって参照されるOrder
に問題がありますか?
助けてください。
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;
}
}
}
それは素晴らしいです、ガレッブ、本当にありがとう、それは完璧に動作しています。 – Chinmay
FYI、あなたのリポジトリのInsert()がDBContext.Add()を呼び出していると推測しています。Add()メソッドはオブジェクトグラフ全体を正しい順序で正しく更新します。あなたも同様に支払いを行うことができます。それ以外の方法で顧客に注文リストを追加して顧客を挿入しても、それでも機能します。 – garethb
info garethbありがとう、私はそれをチェックします。ボトルネックの点で私を助けてください。 – Chinmay