利用Entity Framework修改指定字段中的值

利用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");
}

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

时间: 2024-10-05 05:53:14

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

Java在利用反射条件下替换英文字母中的值

(1)创建两个Class: ReflectTest类如下: package cn.itcast.day01; import java.lang.reflect.Constructor; import java.lang.reflect.Field; public class ReflectTest { public static void main(String[] args) throws Exception { changeStringValue(pt1); System.out.print

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

原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 11:00:00 a 2011-03-01 14:00:00 b 2011-03-01 13:00:00 b 2011-03-01 13:20:00 b 2011-03-01 14:00:00 查询结果为 name createdate count a 2011-03-01 10:00:00 2 a

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

在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt,见图1.CreatedBy用来存是谁进行了这次更改.CreatedAt用来存什么时间进行了这次更改.但是这种方式只能保存最后一次进行改动的人和时间.中间的改动历史都不能保留.改动前的值也不能保留. 图 1 对于关键的信息系统,例如银行系统,电商系统,公安系统,我们需要保存数据完整的变动信息和历史.这

批量替换 MySQL 指定字段中的字符串

MySQL指定字段的特定字符串批量替换的具体语法是: UPDATE 表名 SET 字段名 = replace(字段名, 'http://www.jptcgyy.com', ''); 就是讲 该字段所有的 http://www.jptcgyy.com网址替换为空! 另外,针对ID也可以作个筛选替换,比如我们想把content_type__theme表中ID小于300的field_down_value字段中"86"替换成"80",那么语法就是: UPDATE conte

React 修改获取state中的值

14===> 修改state中的值 不能够直接修改 state = { num: 10 } 如 this.state.num+=12; 不能够直接修改 错误 通过 this.setState({ num:this.state.num+12 }) 15==> 获取state中的值 ps==>当你进入一个组件时 不能够使用下面这一种方式 import {StaTest} from "./components/StaTest" 报错 应该为import StaTest fr

java 利用反射修改对象中的list类型字段中的值。

这两天没事学习下了反射.通过反射我们可以修改对象中的字段的值. 就如下面这段代码 Grade grade=new Grade(); Field f=Grade.class.getDeclaredField("name"); f.setAccessible(true); f.set(grade, "三年级一班"); 这是so easy的,这时我想到了要是list类型的字段该怎么通过反射修改呢. 于是我就尝试了下,最终做了出来. 先准备两个类. public class

Entity Framework学习-实体框架中的code-first迁移

.net开发在涉及到操作数据库时,特别是访问SQL SERVER数据库时,经常需要使用一些ORM框架,最常用,且功能很强大的要数EF了.在使用EF进行涉及数据库的开发时,一般会涉及两种模式:1,DB first;2,Code first.相比前者,Code first比较灵活,适合敏捷开发,特别是数据库表结构经常变动的情况.在使用Code first时,经常会碰到对实体类的改动与数据库同步的问题,这时候我们就需要使用code first中的迁移功能,具体可以参考该文:https://msdn.m

Swift中利用AppDelegate实现调用指定ViewController中的函数

接着上一篇的Blog讲,在我们自定义了TableViewCell之后,我们可能需要点击cell里面的button等操作,比如点击了以后跳转到别的页面,这个时候,因为跳转动作是在tableview所在的viewcontroller(假设为A类)实现的,所以,我们需要在tablewViewCell类里面调用A类的一个实例,这个实例一般是通过AppDelegate类实现的. 具体来看一下实现过程. 我们先来看一下整体的需求: 在"基站列表"这个ViewController里面,我们的Tabl

[Entity Framework]获取部分字段的查询

using (var ObjectContext = new AgentSystemEntities()) { DateTime dt = new DateTime(1997, 1, 1); string entitySQL = "SELECT VALUE Users FROM Users WHERE Users.AddDateTime > @dt;"; ObjectParameter[] ps = { new ObjectParameter("dt", dt