【发布时间】:2021-05-24 20:16:57
【问题描述】:
public JsonResult CreateOrder([FromBody]CustomerOrderModel orderModel)
{
var customer = _customerService.GetCustomer(orderModel.customerid);
var order = new OrderViewModel();
order.Customer = customer;
order.OrderPlacedOn = DateTime.Now;
order.OrderForCustomer = customer.BusinessName;
order.DiscountTotal = 0;
order.TrackingCode = Guid.NewGuid().ToString();
order.OrderTakenBy = _userManager.GetUserName(User);
order.OrderChannel = orderModel.channel;
order.CustomerNotes = orderModel.customernotes;
order.isArchived = false;
order.isRead = false;
var orderitems = new List<OrderItemViewModel>();
foreach (var item in orderModel.items)
{
var oi = new OrderItemViewModel();
var product = _productService.GetProduct(item.pid);
var price = (decimal)product.Price1;
oi.ProductId = item.pid;
oi.ProductCode = product.Code;
oi.LineDiscount = 0;
oi.LineTotal = price * item.qty;
oi.VatTotal = price * (product.VatPercent / 100) * item.qty;
oi.Quantity = item.qty;
oi.Price = price;
oi.PriceAfterCampaign = 0;
oi.PriceAfterDiscounts = price * item.qty;
oi.ProductName = product.Name;
oi.VatPercentage = product.VatPercent;
oi.CampaignInfo = string.Empty;
oi.isAccepted = true;
oi.isAcceptedNotes = string.Empty;
orderitems.Add(oi);
};
order.OrderItems = orderitems;
order.SubTotal = order.OrderItems.Sum(s => s.LineTotal);
order.VatTotal = order.SubTotal = order.OrderItems.Sum(s => (decimal)s.VatTotal);
order.GrandTotal = order.SubTotal = order.OrderItems.Sum(x => x.LineTotal + (decimal)x.VatTotal);
_orderService.CreateOrder(order);
return Json(order);
}
执行上述方法时出现错误:
System.InvalidOperationException: '实体类型的实例 无法跟踪“客户”,因为另一个具有密钥的实例 值“{CustomerId: xx}”已被跟踪。安装时 现有实体,确保只有一个实体实例具有给定的 键值已附加。'
我无法在存储库级别更改任何内容,在这种情况下,我该如何解决?
【问题讨论】:
-
您能在上下文中添加
order时显示吗? -
我正在编辑我的问题以包含整个方法。
-
是 ASP.NET Core 吗?
-
是 aspnet5.0 和 EntityFrameworkCore 5.0.2
-
你能显示
CreateOrder吗?我认为问题出在这种方法上。
标签: asp.net-mvc asp.net-core entity-framework-core