利用Entity Framework修改指定字段中的值一般我们编辑某些模型的时候会用到类似这样的代码:

[HttpPost]
public ActionResult Edit(Article model)
{
if (model.Id == 0)
{
return HttpNotFound();
}
using (db)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Index");
}

  这样的代码完全能够符合我们的要求,能够顺利的修改我们想要修改的数据。
但是其中却有一个问题:例如说文章的创建时间字段Create_Time是由文章创建的时候生成的,其值不应该随着文章的编辑而变化,为了使这个值不变,我们就需要在前台的html代码里加上一个隐藏的name属性为Create_Time的input并且设置其值为文章的创建时间。这样做也能成功但是不保险,如果编辑人员有能力修改input里的值的话还是能够修改数据库中的数据的。所以我们应该从代码的层面上来解决这个问题。
再举个例子,用户在修改密码的时候我们只希望单单的修改密码字段,而不需要将原来的用户模型全都加载进来,然后再修改密码,再保存。这样做感觉上是已经多走了好多的路。
而如果我们直接手写sql语句的话我们可以直接执行SQL语句:

update userinfo set password = '123456'

  很显然如果我们类似使用dbContext的执行sql语句就有点本末倒置了:

db.Database.ExecuteSqlCommand("update userinfo set password = '123456'");

  

解决办法

使用类似下列代码:也就是只设置模型的某些特定的字段来告诉EF我们希望修改哪些字段。

public ActionResult TestEdit(int id=0)
{
var model = new Article {Id = id, Title = $"after edit!current time: {DateTime.Now}"};
db.Article.Attach(model);
db.Entry(model).Property(x => x.Title).IsModified = true;
db.SaveChanges();
return RedirectToAction("Index");
}

  上述代码只修改了文章的标题,而其他字段并没有做任何的修改,整个修改过程也没涉及到任何的读取数据库操作。这样的修改显然要更加合理。

利用Entity Framework修改指定字段中的值的更多相关文章

  1. entity framwork修改指定字段

    1.ef修改时指修改指定字段public void ChangePassword(int userId, string password) { var user = new User() { Id = ...

  2. Entity Framework搜索指定字段解决方案

    public class Book { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; ...

  3. Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列

    原文:Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列 今天在采用Entity Framework 的Database First反向以 ...

  4. Entity Framework Core 2.0 中使用LIKE 操作符

    Entity Framework Core 2.0 中使用LIKE 操作符 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译 ...

  5. javascript jquery 修改指定标签中的内容

    javascript jquery 修改指定标签中的内容 $("#test1").text("Hello world!"); document.getEleme ...

  6. SqlServer修改某个字段的默认值时的操作步骤

    sqlserver有时候需要修改一个字段的默认值,却发现修改(update)不了,也删除(delete)不了,排查发现,需要先删除原有的默认值约束,才行:步骤如下1.2.3.若原来这个字段就没有默认值 ...

  7. 【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数

    原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 ...

  8. 【转】在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动

    在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt, ...

  9. 在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动

    在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt, ...

随机推荐

  1. P4160 [SCOI2009]生日快乐[dfs]

    题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕. 现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕. win ...

  2. c#2.0锐利体验《泛型编程》读书笔记

    1.c#泛型及机制 Class Stack<T> { } T 其实为type的缩小,不过也可为其他字符代替T ,被称为“泛型类型”  T为晚绑定的,在编译的时候还不能确定T的确切类型. 2 ...

  3. 深入详解JVM内存模型

    JVM内存结构 由上图可以清楚的看到JVM的内存空间分为3大部分: 堆内存 方法区 栈内存 其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为 ...

  4. test20190926 孙耀峰

    70+100+0=170.结论题自己还是要多试几组小数据.这套题还不错. ZYB建围墙 ZYB之国是特殊的六边形构造. 已知王国一共有

  5. python获取参数列表

    def f(a=1, b=2, c=3): print(locals())#在函数内获取 #使用inspect模块,简单方便 python2.7: import inspectinspect.geta ...

  6. shell脚本自动化安装pgsql10.5版本

    看到有个大佬写了个很实用的脚本,于是这里做了转载 #!/bin/bash #进入软件的制定安装目录 echo "进入目录/usr/local,下载pgsql文件" cd /usr/ ...

  7. template_constructor_function

    #include <iostream> using namespace std; template <class T> class MyClass{ public: templ ...

  8. C++指针的一些问题

    用变量a给出下面的定义: a)一个整形数(An integer) b)一个指向整形数的指针 c)一个指向指针的指针,它指向的指针指向一个整形数 d)一个有十个整形数的数组 e)一个有十个指针的数组,该 ...

  9. Tips on Python

    python是一种解释性文件,代码要通过解释器解释运行.python解释器就是python.exe这个程序. pip也是一个pip.exe的程序,是用来管理python的第三方库. 有两种执行方式:脚 ...

  10. jupyter Notebook 设置密码

    由于服务器关闭了图形界面 所以在服务器上安装Jupyter Notebook 随后本机web访问,利用本机的显卡可以执行plt相关图形命令 本次介绍如何设置Jupyter Notebook的密码设定 ...