博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EntityFramework 更新数据库字段的三种方法
阅读量:6219 次
发布时间:2019-06-21

本文共 2057 字,大约阅读时间需要 6 分钟。

例:

实体类:

public class TestDbContext : DbContext    {        public DbSet
Tests { get; set; } public TestDbContext() : base() { } } public class Test { public long ID { get; set; } public string Name { get; set; } public string Email { get; set; } public string Remarks { get; set; } }

创建数据库

TestDbContext db = new TestDbContext();            db.Tests.Add(new Test() { Name = "测试1", Email= @"123@abc.com", Remarks = "测试1备注"}); db.Tests.Add(new Test() { Name = "测试2", Email = @"456@abc.com", Remarks = "测试2备注"}); db.SaveChanges();

更新数据 第一种方法:

先查询记录,然后修改相应的属性。此方法虽然多了一个查询步骤,但是也由此利用了EF的自动跟踪功能,后续操作比较方便。

比如,生成的SQL语句只会去修改相应的修改过的字段。

而且经测试发现,如果实体属性值没有改变,不会生成SQL语句,比如将下面的代码执行两次,第二次 SaveChanges() 方法不会执行SQL更新语句(注:由于还是会执行一次查询,所以运行效率并没有显著提升)

TestDbContext db = new TestDbContext();            var test = db.Tests.Find(1);            test.Remarks = "更新字段方法1"; db.SaveChanges();

第二种方法:

直接创建一个新的实体类,然后修改实体对象的状态。此方法虽然少了一个查询步骤,但生成的SQL语句将会修改全部字段,而且还要确保 ID 值存在。(注意:由于会修改全部字段,没有设置的字段会被设置为null)

TestDbContext db = new TestDbContext();            Test test = new Test() { ID = 1, Remarks = "更新字段方法2" }; db.Entry(test).State = System.Data.Entity.EntityState.Modified; db.SaveChanges();

第三种方法:

创建一个实体类,将实体附加到数据库上下文,然后修改相应属性值的修改标识为 true ,此方法生成的SQL语句与第一种方法一样,比较简洁,而且还少了查询步骤,只是后续的操作比较麻烦,因为要手动设置各个属性的修改标识,还要确保 ID 值存在。

TestDbContext db = new TestDbContext();            Test test = new Test() { ID = 1, Remarks = "更新字段方法3" }; db.Tests.Attach(test); db.Entry(test).Property("Remarks").IsModified = true; db.SaveChanges();

生成的SQL语句(使用 SQL Server Profiler 跟踪数据库所得): 第一种方法:(注:第一种方法的代码执行一次后再次执行没有跟踪到更新数据库的SQL语句)

exec sp_executesql N‘UPDATE [dbo].[Tests]SET [Remarks] = @0WHERE ([ID] = @1)‘,N‘@0 nvarchar(max) ,@1 bigint‘,@0=N‘更新字段方法1‘,@1=1

第二种方法:(注:查看SQL语句可知,使用此方法如果不注意可能会导致数据被错误修改)

exec sp_executesql N‘UPDATE [dbo].[Tests]SET [Name] = NULL, [Email] = NULL, [Remarks] = @0WHERE ([ID] = @1)‘,N‘@0 nvarchar(max) ,@1 bigint‘,@0=N‘更新字段方法2‘,@1=1

第三种方法

exec sp_executesql N‘UPDATE [dbo].[Tests]SET [Remarks] = @0WHERE ([ID] = @1)‘,N‘@0 nvarchar(max) ,@1 bigint‘,@0=N‘更新字段方法3‘,@1=1

 

转载地址:http://vpoja.baihongyu.com/

你可能感兴趣的文章
SSH登陆响应慢的问题
查看>>
静态方法和实例化方法的区别
查看>>
live555 RTSP服务器建立及消息处理流程
查看>>
20141117
查看>>
iOS学习笔记—ViewController/生命周期
查看>>
GoodReader跨域访问HT for Web手册
查看>>
oracle: job使用
查看>>
hive在命令行消除进度等错误信息
查看>>
博客园客户端UAP开发随笔-从9个细节说ListView的使用
查看>>
Java基础篇--字符串处理(StringBuffer)
查看>>
MYSQL数据类型转换
查看>>
已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。...
查看>>
浏览器提示代理服务器没有响应
查看>>
lnmp.org一键安装包
查看>>
Canny边缘检測算法原理及其VC实现具体解释(一)
查看>>
more命令(转)
查看>>
java设计模式演示样例
查看>>
C++内存泄露的有效预防方法:谁使用,谁删除 (1.2)
查看>>
使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
查看>>
转【Python】同时向控制台和文件输出日志logging
查看>>