C# 无法将数据插入数据库
首先,我从会话中选取数据。我试图将这些数据转移到另一个模型。但我的第一次数据(会话)已成功上载到数据库。第一次数据传输成功。但是第二,第三,第四,不管怎样,这些数据不能传递我的模型 这是我的密码:C# 无法将数据插入数据库,c#,asp.net-mvc,asp.net-core,entity-framework-core,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core,Entity Framework Core,Asp.net Core Mvc,首先,我从会话中选取数据。我试图将这些数据转移到另一个模型。但我的第一次数据(会话)已成功上载到数据库。第一次数据传输成功。但是第二,第三,第四,不管怎样,这些数据不能传递我的模型 这是我的密码: public async Task<IActionResult> Checkout(Order11 anOrder) { List<Shop> shop = HttpContext.Session.Get<List<Shop>>("sh
public async Task<IActionResult> Checkout(Order11 anOrder) {
List<Shop> shop = HttpContext.Session.Get<List<Shop>>("shop");
for (int i = 0; i < shop.Count(); i++) {
if (shop != null) {
anOrder.ProductName = shop[i].Name;
anOrder.ImagePath = shop[i].Image;
anOrder.Price = shop[i].Price;
anOrder.Quantity = shop[i].Quantity;
anOrder.OrderNo = GetOrderNo();
_db.Order11.Add(anOrder);
}
_db.SaveChanges();
}
// other code
}
运行应用程序时,会出现以下错误:
我想将所有会话数据传输到我的模型(DB)中。这个问题的解决办法是什么?我是初学者,请帮助。请设置
anOrder.Id=0编码>保存数据前。请使用try、catch显示内部异常。我不能评论
public async Task<IActionResult> Checkout(Order11 anOrder)
{
List<Shop> shop = HttpContext.Session.Get<List<Shop>>("shop");
for (int i = 0; i < shop.Count(); i++)
{
try
{
if (shop != null)
{
anOrder.ProductName = shop[i].Name;
anOrder.ImagePath = shop[i].Image;
anOrder.Price = shop[i].Price;
anOrder.Quantity = shop[i].Quantity;
anOrder.OrderNo = GetOrderNo();
_db.Order11.Add(anOrder);
}
_db.SaveChanges();
}
catch(Exception ex)
{
}
}
// other code
}
公共异步任务签出(Order11-anOrder)
{
List shop=HttpContext.Session.Get(“shop”);
对于(int i=0;i
anOrder的键属性不是默认值(意味着它被分配给了一些有效的非零值)。我想它的键可能是Id
,它是自动递增的(由db自动生成),不应该显式地分配一个值。你应该检查一下。如果要添加密钥属性,则在将其添加到DbContext
之前,应通过将其重置回零值(例如:0
for int)来忽略该密钥属性。在方法签出
的最开始,也要先尝试调试,看看是否与我所说的相同。但是,您还应该了解为什么在将实体传递到您的方法之前将key属性分配给某个非零值,这样您可能会在执行流的前面发现一些错误。如果将其设置回零也可以,那么就这样做。您可以发布Order11
模型以使其干净吗?您的身份是什么column@BrettLee当然,您可以为多个属性设置值,但这里的要点是关键属性值(与您发布的模型类一样,它是Id
)。您是否看到该Id
的任何赋值?使用ViewModel只是设计方法的另一种方式,问题是要理解您的目标、方法的作用、它需要什么以及输出效果是什么(正如我上面已经评论过的)。@BrettleId
是在第一个循环之后生成的,因此您看到的错误会在第二个循环中抛出。我错过了您将SaveChanges
放入循环的要点。这完全没有道理。你在很多方面都做错了,现在我不明白你到底想要什么。添加了这个代码后,代码可以工作,但OP甚至可能不知道它的效果是否理想/预期,例如:稍后他可能会发现一些订单应该更新,但改为添加(克隆为重复项)=)。OP正在循环中保存相同的模型。首次保存自身后,ID将用主键值更新。因此,每次调用savechanges()时,都需要将Id重置为0。啊,我明白了,忽略了这一点。因此,他的代码看起来像一个克隆作业(来自传入的一个实体)。这可能仍然不是他想要的。这里肯定有一个设计缺陷。但我不是在评判。
public async Task<IActionResult> Checkout(Order11 anOrder)
{
List<Shop> shop = HttpContext.Session.Get<List<Shop>>("shop");
for (int i = 0; i < shop.Count(); i++)
{
try
{
if (shop != null)
{
anOrder.ProductName = shop[i].Name;
anOrder.ImagePath = shop[i].Image;
anOrder.Price = shop[i].Price;
anOrder.Quantity = shop[i].Quantity;
anOrder.OrderNo = GetOrderNo();
_db.Order11.Add(anOrder);
}
_db.SaveChanges();
}
catch(Exception ex)
{
}
}
// other code
}