我是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; ?
答案 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或其他代码生成技术。