【问题标题】:Editing and Updating Entity Framework entity in ASP .NET MVC在 ASP .NET MVC 中编辑和更新实体框架实体
【发布时间】:2010-01-25 04:56:48
【问题描述】:

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

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

控制器看起来像这样:

public ActionResult UpdateAction( ABC obj )

我在 obj 中得到了一切正常和公平的东西 - 即标题和 ID。

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

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

【问题讨论】:

标签: asp.net-mvc entity-framework


【解决方案1】:
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);

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多