gpt4 book ai didi

c# - Entity Framework 在循环中保存第一项,但没有其他

转载 作者:行者123 更新时间:2023-11-30 22:26:15 24 4
gpt4 key购买 nike

在我的 Controller 中,我循环遍历项目并将它们保存到我的数据库中。问题是它保存了第一项,但没有保存其他项。我在循环中的“SaveItem()”行上放置了一个断点,它每次都会命中它,但对我来说奇怪的是它只通过第一个项目的方法。

我做错了什么?

public void SubmitItem(Cart cart, ShippingDetails shippingDetails, ProcessedItems processedItem, string orderID)
{
var cartItems = cart.Lines;
//CartIndexViewModel cartIndex = new CartIndexViewModel();
//var customID = cartIndex.OrderID;

foreach(var item in cartItems)
{
processedItem.OrderID = orderID;
processedItem.ProductID = item.Product.ProductID;
processedItem.Name = item.Product.Name;
processedItem.Description = item.Product.Description;
processedItem.Price = item.Product.Price;
processedItem.Category = item.Product.Category;
processedItem.ImageName = item.Product.ImageName;
processedItem.Image2Name = item.Product.Image2Name;
processedItem.Image3Name = item.Product.Image3Name;

processedItem.BuyerName = shippingDetails.Name;
processedItem.Line1 = shippingDetails.Line1;
processedItem.Line2 = shippingDetails.Line2;
processedItem.Line3 = shippingDetails.Line3;
processedItem.City = shippingDetails.City;
processedItem.State = shippingDetails.State;
processedItem.Zip = shippingDetails.Zip;
processedItem.Country = shippingDetails.Country;

processedItem.Status = "Submitted";

processedItems.SaveItem(processedItem);

}

}


public class EFProcessedItemsRepository : IProcessedItems
{
private EFDbContext context = new EFDbContext();

public IQueryable<ProcessedItems> ProcessedItem
{
get { return context.ProcessedItems; }
}

public void SaveItem(ProcessedItems processedItem)
{
if(processedItem.ProcessedID == 0)
{
try
{
context.ProcessedItems.Add(processedItem);

context.SaveChanges();
}
catch (Exception)
{

throw;
}

}
else
{
context.Entry(processedItem).State = EntityState.Modified;

}
}

public void DeleteItem(ProcessedItems processedItem)
{
context.ProcessedItems.Remove(processedItem);
context.SaveChanges();
}
}

这里是 processedItem 的类:

public class ProcessedItems
{
[Key]
public int ProcessedID { get; set; }

public string OrderID { get; set; }
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
public string ImageName { get; set; }
public string Image2Name { get; set; }
public string Image3Name { get; set; }
public string Status { get; set; }

//shipping
public string BuyerName { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Line3 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Country { get; set; }


}

接口(interface):

public interface IProcessedItems
{
IQueryable<ProcessedItems> ProcessedItem { get; }
void SaveItem(ProcessedItems processedItem);
void DeleteItem(ProcessedItems processedItem);
}

最佳答案

尝试在添加所有项目后调用 context.SaveChanges(),我认为它应该一次将它们持久化。

另一个尝试:

重构你的代码,让 SaveItem 只接受一个项目来保存,添加它并调用 SaveChanges()

在方法外部循环遍历购物车项目,并调用方法一次保存一个项目。

// set orderID, shippingDetails above

foreach(var item in cartItems)
{
ProcessedItems processedItem = new ProcessedItems();
processedItem.OrderID = orderID;
processedItem.ProductID = item.Product.ProductID;
processedItem.Name = item.Product.Name;
processedItem.Description = item.Product.Description;
processedItem.Price = item.Product.Price;
processedItem.Category = item.Product.Category;
processedItem.ImageName = item.Product.ImageName;
processedItem.Image2Name = item.Product.Image2Name;
processedItem.Image3Name = item.Product.Image3Name;

processedItem.BuyerName = shippingDetails.Name;
processedItem.Line1 = shippingDetails.Line1;
processedItem.Line2 = shippingDetails.Line2;
processedItem.Line3 = shippingDetails.Line3;
processedItem.City = shippingDetails.City;
processedItem.State = shippingDetails.State;
processedItem.Zip = shippingDetails.Zip;
processedItem.Country = shippingDetails.Country;
SubmitItem(processedItem);

}

public void SubmitItem(ProcessedItems processedItem)
{
processedItem.Status = "Submitted";
processedItems.SaveItem(processedItem);
}

关于c# - Entity Framework 在循环中保存第一项,但没有其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com