c# - 属性 'ID'是对象关键信息的一部分,在asp.net mvc中不能修改

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

我使用了代码优先方法的 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();
        }

提前致谢。

最佳答案

您每天设置一次 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();

关于c# - 属性 'ID'是对象关键信息的一部分,在asp.net mvc中不能修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720888/

相关文章:

c# - 是否有可能为 const 提供 setter/getter ?

c# - 我什么时候应该在 IEnumerable<T> 的上下文中使用 .Count() 和 .Count

C# 当我使用 reflect 注册类时,为什么不能从 ioc 获取正确的实例

c# - 为每种类型选择最新项目

asp.net - 更新记录属性后,EF 有时会在 SaveChanges() 上抛出 NullReferenceException

c# - 在C#中创建DIV并向其添加控件

c# - 实现异步 Entity Framework 存储库的正确方法

c# - 无法更新用户,因为它正在检查唯一的用户名

c# - 在 MVC Razor 中回发后保持下拉选择状态?

jquery - 如何使自动完成搜索结果与页面内容重叠