EF持久列忽略那些不在视图中的列

时间:2012-11-25 18:01:40

标签: asp.net-mvc entity-framework

我有mvc视图,它有一些来自实体的列。当我执行db.SaveChanges()时,所有不属于视图的列都将使用NULL进行更新,因此会覆盖数据库记录中存在的任何值。那太蹩脚了。 我知道我可以为视图做ModelView并绑定我想要的那些列。但我正在寻找一种方法来简单告诉EF,在此特定更新期间“忽略”列,以便不更新MvC视图中不存在的列。 我正在使用EF 5.有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我不知道为什么你要避免创建一个单独的模型,但我想你知道你在做什么,所以也许尝试这种方法来欺骗EF认为属性没有改变:

var entry = context.Entry(obj);
entry.Property(name).IsModified = false;

我自己没有尝试过,但它应该可以在EF 5中使用。如果它不起作用,请尝试通过搜索entry.CurrentValues.PropertyNames集合访问该属性条目,然后将IsModified设置为{ {1}}。

答案 1 :(得分:0)

我认为我需要的是这个

User u = db.Users.Find(user.UserID);
        if (u!=null) {

            TryUpdateModel(u);
if (ModelState.IsValid)
{
                db.SaveChanges();
}