利用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. Unity进阶:行为树 01

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  2. linux卸载mysql误删mysql.pm

    操作步骤如下 linux卸载mysql:yum remove mysql 查找mysql所有的文件并删除: 查找:find / -name mysql 删除:rm -rf xxx 误操作删除mysql ...

  3. Codeforces Round #574 (Div. 2)题解

    比赛链接 传送门 A题 题意 \(n\)个人每个人都有自己喜欢喝的\(vechorka\)口味,现在给你\(\lceil n/2\rceil\)箱\(vechorka\),每箱有两瓶,问最多能有多少个 ...

  4. ora-00054资源正忙,但指定以nowait方式

    select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.o ...

  5. Import declarations are not supported by current JavaScript version

    原因为:不支持当前的js版本,在perference中进行设置javascript的版本即可 注意:在perference中进行更改,而不是defeaut perference,快捷键操作为:comm ...

  6. 多项式的各类计算(多项式的逆/开根/对数/exp/带余除法/多点求值)

    预备知识:FFT/NTT 多项式的逆 给定一个多项式 F(x)F(x)F(x),请求出一个多项式 G(x)G(x)G(x),满足 F(x)∗G(x)≡1(mod xn)F(x)*G(x) \equiv ...

  7. freemarker使用shiro标签(spring boot)

    freemarker使用shiro标签(spring boot) 2018年07月03日 14:20:37 niu_sayok 阅读数:348更多 个人分类: freeMarkerShiro   首先 ...

  8. python操作json文件获取内容

    写case时,将case 写到json文件比写到,写python一定要学会处理json 以下,是要处理的json 处理操作包括:打开json文件,获取json文件内容,关闭json文件,读取内容中的对 ...

  9. java之大文件分段上传、断点续传

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  10. 2019.11.30 Mysql查询知识

    不等于:<> 判断为空的条件:null和空格(空字符串) 判断是否为null:xxxx  is  not  null    /    xxxx   is   null 判断null: SE ...