【发布时间】:2021-04-09 10:09:52
【问题描述】:
首先,我从会话中挑选数据。我试图将这些数据转移到另一个模型。但是我的第一个数据(会话)是否已成功上传到数据库中。第一个数据传输成功。但是第二个第三个第四个无论如何,这些数据无法传输我的模型。
这是我的代码:
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
}
Order11.cs
public class Order11
{
public int Id { get; set; }
[Display(Name = "Order Number")]
public string OrderNo { get; set; }
[Required]
public string Name { get; set; }
[Required]
[Display(Name = "Phone Number")]
public string PhoneNo { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string Address { get; set; }
public DateTime OrderDate { get; set; }
public string ImagePath { get; set; }
public int Quantity { get; set; }
public int Price { get; set; }
public string ProductName { get; set; }
}
}
当我运行应用程序时,我得到了这个错误:
我想将所有会话数据传输到我的模型(数据库)中。这个问题的解决方案是什么?我是初学者请帮忙。
【问题讨论】:
-
anOrder的 key 属性不是默认值(意味着它被分配给一些有效的非零值)。我想它的键可能是Id,它是自动递增的(由db自动生成),不应该显式地分配一个值。你应该检查一下。如果要添加,则应忽略 key 属性,将其重置为零值(例如:0表示 int),然后再将其添加到DbContext。 -
就在你方法的开头
Checkout,也可以先调试一下,看看是不是像我说的那样。但是,您还应该在此处的方法中传递实体之前找出为什么将 key 属性分配给某个非零值,这样您可能会在执行流程的早期发现错误。如果将其设置回零无论如何都可以,那就去做吧。 -
您能否发布
Order11模型,以便清楚您的身份列是什么 -
@BrettLee 当然你设置了多个属性的值,但这里的重点是关键属性值(在你发布的模型类中,它是
Id)。您是否看到该Id的任何指定值?使用 ViewModel 只是设计方法的另一种方式,问题是要了解您的目标、方法的作用、它需要什么以及输出效果是什么(正如我在上面已经评论过的)。 -
@BrettLee
Id是在第一个循环之后生成的,因此您看到的错误会在第二个循环中引发。我错过了您将SaveChanges放入循环中的观点。这根本没有意义。你在很多方面都做错了,现在我不明白你到底想要什么。
标签: c# asp.net-mvc asp.net-core entity-framework-core asp.net-core-mvc