Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Asp.net mvc ASP.NETMVC中实体框架实体的编辑与更新_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc ASP.NETMVC中实体框架实体的编辑与更新

Asp.net mvc ASP.NETMVC中实体框架实体的编辑与更新,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有一个名为“ABC”的entityframework实体(属性ID和标题) 在更新记录视图中,我添加了ID作为隐藏字段,标题是文本框 控制器看起来像: public ActionResult UpdateAction( ABC obj ) 我在obj中得到了一切美好而公平的东西,即头衔和身份证 现在,为了更新数据库中的记录,我读取了原始实体: var original = (from x in base.context.ABC where x.id == obj.id ).Single();

我有一个名为“ABC”的entityframework实体(属性ID和标题)

在更新记录视图中,我添加了ID作为隐藏字段,标题是文本框

控制器看起来像:

public ActionResult UpdateAction( ABC obj )
我在obj中得到了一切美好而公平的东西,即头衔和身份证

现在,为了更新数据库中的记录,我读取了原始实体:

var original = (from x in base.context.ABC where x.id == obj.id ).Single();
现在,为了反映原始版本中的更改,我认为应该更新模型:

this.TryUpdateModel( original );
我得到一个错误:|。。。声明无法更改列ID

The property 'id' is part of the object's key information and cannot be modified. 
我不想手动将属性指定回原始对象

另一种选择是:

TryUpdateModel(original, new string[] { "Title" }, form.ToValueProvider());
但我讨厌字符串——而且,我的对象有20个属性:|

有人能建议一个更好的模式吗

Rgds

公共类控制器文本:控制器
{
受保护的void UpdateModel(TModel模型,参数表达式[]属性),其中TModel:class
{
var props=新列表(property.Length);
foreach(属性中的var p)
{
var memberExpression=removeOne(p.Body)作为memberExpression;
if(memberExpression==null)
{
抛出新的NullReferenceException(“无法检索有关{0}成员的信息”。FormatThis(typeof(TModel.Name));
}
添加(memberExpression.Member.Name);
}
this.UpdateModel(model,props.ToArray());
}
私有静态表达式removeOne(表达式体)
{
var一元=作为一元表达式的主体;
if(一元!=null)
{
返回一元操作数;
}
返回体;
}
}
例如:

UpdateModel<MyModel>(model, x => x.PropertyFromMyModel_1, x => x.PropertyFromMyModel_2);
UpdateModel(model,x=>x.PropertyFromMyModel_1,x=>x.PropertyFromMyModel_2);

我想我已经找到了解决办法@
UpdateModel<MyModel>(model, x => x.PropertyFromMyModel_1, x => x.PropertyFromMyModel_2);