随笔 - 432  文章 - 0  评论 - 15  阅读 - 63万

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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语句:

1
update userinfo set password = '123456'

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

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

  

解决办法

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

1
2
3
4
5
6
7
8
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");
}

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

posted on   狼来了  阅读(456)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2015-06-23 IIS 7.5 配置伪静态
2015-06-23 TrippleDESCSPEncrypt 加密解密试试看
2015-06-23 C# 3DES加密解密,差点要了命
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示