实体框架 - 更新表中的行

时间:2011-08-22 15:39:43

标签: c# frameworks ado.net entity

我是Entity Framework的新手,我有一个关于更新表中数据的问题。

目前,我正在使用以下方法更新数据并寻找更好的方法,如果有人可以帮助我。

让我们说我正在更新"类别"表,它只有3个字段(id,name,archived)

private void UpdateCategory(category entity)
{
    category  catObj = context.category.find(e=> e.id == id);
    catObj.name = entity.name;
    catObj.archived = entity.archived;
    context.savechanges();
}

我的问题是,如果类别表中有50个字段,我将需要单独分配每个字段。我不能做这样的事情.catObj = entity; ?

3 个答案:

答案 0 :(得分:1)

要自动执行此操作,您可以使用AutoMapper等项目。

但是你必须小心这一点,因为如果一个属性没有传入的类别的值,它将用非值覆盖旧类别的属性,即使它不是预期的。为了解决这个问题,你必须使用automapper配置来正确地完成投影。

答案 1 :(得分:0)

您可以使用单个LINQ操作更改集合中所有成员的属性:

collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();

所以:

private void UpdateCategory(category entity)
{
    category  catObj = context.category.find(e=> e.id == id);
    catObj.Select(c=> {c.name = entity.name; c.archived = entity.archived; return c;}).ToList();
    context.savechanges();
}

答案 2 :(得分:0)

我不确定AutoMapper是否适合您的目的。此外,您可能还必须指定映射。

对于你所描述的内容,我通常在每个实体和方法中都有void CopyEntityFrom(Category Source)这样的方法,我有映射语句(例如this.name = entity.name;)但我这样做不是手动但是生成它们使用MVCScaffolding或其他代码生成技术。