【问题标题】:The property 'ID' is part of the object's key information and cannot be modified in asp.net mvc属性“ID”是对象的关键信息的一部分,不能在 asp.net mvc 中修改
【发布时间】:2016-01-11 11:51:41
【问题描述】:

我已经使用了代码优先的实体框架。

当我尝试将记录一个接一个地从 Fromdate 传递到 Todate 时,它​​的第一次工作,在它给出如下错误之后:“属性 '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();
        }

提前致谢。

【问题讨论】:

  • 发布完整的堆栈跟踪。
  • 也发布你的整个模型类。
  • 什么是todaycooked?您的 for 循环多次将同一个对象添加到数据库中
  • todaycooked 是我的模型对象。
  • @mohitkotak 所以...如果那是您的模型对象:为什么要多次添加它?这意味着每条记录一个吗?如果是这样:new todaycooked 每次 for 迭代一次;如果没有:只添加一次!

标签: c# entity-framework asp.net-mvc-4 razorengine


【解决方案1】:

您每天设置一次 ProductCookDate,所以我假设您每天需要一条记录 - 这意味着您的意思是每天有一个 对象 .我怀疑你实际上想要这样的东西:

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();

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2017-08-03
    • 2015-10-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多