我使用了代码优先方法的 Entity Framework 。
当我尝试将记录从日期到日期逐个传递时,它第一次工作时出现错误,如:“属性‘ID’是对象关键信息的一部分,无法修改。”
var fd = todaycooked.CookDate; // 2016-07-01
var td = todaycooked.ToCookDate; //2016-11-01
for (var date = fd; date <= td; date = date.AddDays(1))
{
var product = db.Products.Find(todaycooked.ProductID);
product.Qty = product.Qty + todaycooked.QTY;
todaycooked.Product = product;
todaycooked.CookDate = date;
db.TodayCookeds.Add(todaycooked);
db.SaveChanges();
}
提前致谢。
最佳答案
您每天设置一次 Product
和 CookDate
,所以我假设您想要每天一条记录 - 这意味着您的意思是一条对象 每天。我怀疑你真的想要这样的东西:
var fd = todaycooked.CookDate; // 2016-07-01
var td = todaycooked.ToCookDate; //2016-11-01
// this doesn't change per day, so only fetch it once
var product = db.Products.Find(todaycooked.ProductID);
for (var date = fd; date <= td; date = date.AddDays(1))
{
var toAdd = todaycooked.Clone(); // TODO: add a suitable clone method
toAdd.Product = product;
toAdd.CookDate = date;
db.TodayCookeds.Add(toAdd);
product.Qty = product.Qty + todaycooked.QTY;
db.SaveChanges();
}
但是,您也可以将 db.SaveChanges()
移动到循环的外部,这将使整个事情变得原子化(而不是冒险保存 8 天中的前 4 天,然后出现错误):
...
for (var date = fd; date <= td; date = date.AddDays(1))
{
...
}
db.SaveChanges();
关于c# - 属性 'ID'是对象关键信息的一部分,在asp.net mvc中不能修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720888/