Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq-更新所有属性,但不更新关键属性_Linq_Oop_Reflection_Entity Framework 4 - Fatal编程技术网

Linq-更新所有属性,但不更新关键属性

Linq-更新所有属性,但不更新关键属性,linq,oop,reflection,entity-framework-4,Linq,Oop,Reflection,Entity Framework 4,我有一个“产品”对象,它必须更新数据库中的记录。 通过“productCode”,我使用Linq检索要更新的对象。 覆盖所有属性(而不是关键属性)并保存更改的最优雅方式是什么?在手动获取记录时,您需要以任何方式访问每个属性。我对最简单、最快和最干净的代码的建议: code = productCode_toChange using(Entity ent = new Entity()) { var update = (from x in ent.Products where x.productCod

我有一个“产品”对象,它必须更新数据库中的记录。 通过“productCode”,我使用Linq检索要更新的对象。
覆盖所有属性(而不是关键属性)并保存更改的最优雅方式是什么?

在手动获取记录时,您需要以任何方式访问每个属性。我对最简单、最快和最干净的代码的建议:

code = productCode_toChange
using(Entity ent = new Entity())
{
var update = (from x in ent.Products where x.productCode == code select x).First();
update.property1 = product.property1;
update.property2 = product.property2;
// and so on for each property you change
ent.SaveChanges();
}
您当然可以尝试:

using(Entity ent = new Entity())
{  
var update = (from x in ent.Products where x.productCode == code select x).First();
update = product;
ent.SaveChanges();
}
但我几乎可以保证这不会起作用,因为产品肯定会有一个id属性,它将尝试写入更新,这将引发异常,因为案例产品是表实例的LINQ生成类型


注意检查类型是否一致。还要注意的是,产品代码的SQL类型不应该是文本,因为这种类型是不可比较的

任何代码示例都可以清楚地说明这一点。AutoMapper非常适合这样做。