Entity framework 实体框架:正在插入更新的记录(而不是更新的记录)

Entity framework 实体框架:正在插入更新的记录(而不是更新的记录),entity-framework,dbcontext,updating,Entity Framework,Dbcontext,Updating,我正在使用以下代码更新数据库中的某些记录: IList<Item> list; using (DbContext context = new DbContext() { list = Item.ToList(); foreach (Item item in list) { // attach the item

我正在使用以下代码更新数据库中的某些记录:

        IList<Item> list;
        using (DbContext context = new DbContext()
        {
            list = Item.ToList();
            foreach (Item item in list)
            {
                // attach the item
                context.Item.Attach(item);

                item.Updated = DateTime.Now; 
                context.Items.Add(item);
                context.SaveChanges();
             }
        }
IList列表;
使用(DbContext context=new DbContext()
{
list=Item.ToList();
foreach(列表中的项目)
{
//附上项目
上下文。项。附加(项);
item.Updated=DateTime.Now;
context.Items.Add(item);
SaveChanges();
}
}

问题是EF正在插入一个新项目,而不是更新更新项目…我在网站上搜索了abit,看到了将项目附加到DbContext的建议,但这也不起作用?我做错了什么?

过程应该是:

using (DbContext context = new DbContext()
{
    foreach (Item item in list)
    {
        item.Updated = DateTime.Now; 
        context.Entry(item).State = EntityState.Modified;//attaches automatically
    }
    context.SaveChanges();
}

您正在调用
Add
,这意味着插入。

过程应该是:

using (DbContext context = new DbContext()
{
    foreach (Item item in list)
    {
        item.Updated = DateTime.Now; 
        context.Entry(item).State = EntityState.Modified;//attaches automatically
    }
    context.SaveChanges();
}

您正在调用
Add
,意思是插入。

嗨,我对我的答案做了一点更改:通常最好在
foreach
循环之后调用
SaveChanges
一次,而不是在循环内部。嗨,我对我的答案做了一点更改:通常最好在之后调用
SaveChanges
一次e> foreach循环,而不是循环内部。