gpt4 book ai didi

asp.net-mvc - 在 ASP .NET MVC 中编辑和更新 Entity Framework 实体

转载 作者:行者123 更新时间:2023-12-02 02:35:15 25 4
gpt4 key购买 nike

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

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

Controller 看起来像:

public ActionResult UpdateAction( ABC obj )

我在 obj 中得到的一切都很好和公平 - 即标题和 ID。

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

var original = (from x in base.context.ABC where x.id == obj.id ).Single();

现在为了反射(reflect)原来的变化,我认为应该做更新模型:

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

最佳答案

public class ControllerExt : Controller
{
protected void UpdateModel<TModel>(TModel model, params Expression<Func<TModel, object>>[] property) where TModel : class
{
var props = new List<string>(property.Length);
foreach (var p in property)
{
var memberExpression = RemoveUnary(p.Body) as MemberExpression;
if (memberExpression == null)
{
throw new NullReferenceException("Can not retrieve info about member of {0}".FormatThis(typeof(TModel).Name));
}
props.Add(memberExpression.Member.Name);
}
this.UpdateModel(model, props.ToArray());
}

private static Expression RemoveUnary(Expression body)
{
var unary = body as UnaryExpression;
if (unary != null)
{
return unary.Operand;
}
return body;
}
}

例子:

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

关于asp.net-mvc - 在 ASP .NET MVC 中编辑和更新 Entity Framework 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2127677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com