Entity framework 如何正确更新实体列表?
我想使用EF4更新实体列表Entity framework 如何正确更新实体列表?,entity-framework,Entity Framework,我想使用EF4更新实体列表 我将一个ViewModel对象(从web表单检索)传递给名为“productToUpdate”的方法,该方法包含一个“标签”列表 我通过对名为“requeteValsLabels”的匿名对象的Linq查询,从数据库中获取相应的对象列表 我手动完成了以下操作(在foreach循环中测试id),但我认为这不是最好的方法 for (int i = 0; i < productToUpdate.Labels.Count; i++) {
for (int i = 0; i < productToUpdate.Labels.Count; i++)
{
foreach (var item in productToUpdate.Labels)
{
if (requeteValsLabels[i].ID == item.IdValeurLabel){
requeteValsLabels[i].Valeur = item.Valeur;
}
}
}
for(int i=0;i
我认为更有效的方法是加入集合,然后复制值:
var query = from item in productToUpdate.Labels
join label in requeteValsLabels on item.IdValeurLabel equals label.ID
select new { item, label };
foreach (var pair in query.ToList())
{
pair.label.Valuer = pair.item.Valuer;
}
您可能需要使用以下模式
foreach (var item in productToUpdate.Labels) {
Entity e = new Entity { Id = item.IdValeurLabel};
context.EntitySet.Attach(e);
e.Valeur = item.Valeur;
}
这将防止加载(选择)数据库,但:
- 由于没有发生加载,您无法确定该ID是否存在于数据库中,因此您可能有一个insert a异常,用于尝试更新不存在的行
- 由于未加载,因此无法检查标签修改,可能会使用相同的值进行更新
for (int i = 0; i < requeteValsLabels.Count; i++)
for(int i=0;i
你在寻找一种更简洁的方式来写这个吗?请尝试以下操作:
for (int i = 0; i < requeteValsLabels.Count; i++)
{
requeteValsLabels[i].Valeur = productToUpdate.Labels
.First(x => x.IdValeurLabel == requeteValsLabels[i].ID).Valeur;
}
for(int i=0;ix.IdValeurLabel==requeteValsLabels[i].ID).Valeur;
}
不过要小心。。如果没有满足条件的元素,First()将抛出异常。谢谢,这就是我一直在寻找的