≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

ADO.NET EF中的实体修改方法

人气:538 时间:2019-05-11

这篇文章主要为大家详细介绍了ADO.NET EF中的实体修改方法,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

1.传统修改模式,看下列代码

代码如下:

 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
Region region = context.Region.FirstOrDefault(v => v.RegionID == 4); 
region.RegionDescription = "Test"; 
context.SaveChanges(); 
} 



监控SQL语句:

代码如下:

 
SQL1:SELECT TOP 1 [Extent1].[RegionID] AS [RegionID], [Extent1].[RegionDescription] AS [RegionDescription]FROM [dbo].[Region] AS [Extent1]WHERE 4 = [Extent1].[RegionID] 
SQL2:exec sp_executesql N'update [dbo].[Region]set [RegionDescription] = @0where ([RegionID] = @1)', N'@0 nchar(4),@1 int', @0 = N'Test', @1 = 4 


从这里例子中可以看出使用“传统模式”的数据更新,必须先要执行一次查询,将获取要更新的实体对象,在看下面的例子:

代码如下:

 
Region region; 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
region = context.Region.FirstOrDefault(v => v.RegionID == 4); 
} 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
region.RegionDescription = "Test"; 
context.SaveChanges(); 
} 



更新是不会执行的,因为实体不再 执行 SaveChanges 的对象中所以 当我们更新一个 不再当前连接中的对象是必须要先执行查询获取这个对象才能对其更新,如下:

代码如下:

 
Region region; 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
region = context.Region.FirstOrDefault(v => v.RegionID == 4); 
} 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
Region newRegion = context.Region.FirstOrDefault(v => v.RegionID == region.RegionID); 
region.RegionDescription = "Test"; 
context.SaveChanges(); 
} 


2.使用ApplyPropertyChanges 修改实体

代码如下:

 
Region region; 
using (NorthwindEntities ne = new NorthwindEntities()) 
{ 
//利用EntityObject.Execute(MergeOption.NoTracking),等效于使用ObjectContext.Dettach(EntityObject) 
//查询并分离对象 
region = ne.Region.Execute(MergeOption.NoTracking).Where(v => v.RegionID == 1).FirstOrDefault(); 
} 
//修改分离的值 
region.RegionDescription = "TestTest1"; 
//使用分离的对象 order 更新 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
//将数据载入到context中以便更新 
context.GetObjectByKey(region.EntityKey); 
//使用order 更新 context中的对应对象 
context.ApplyPropertyChanges(region.EntityKey.EntitySetName, region); 
context.SaveChanges(); 
} 

监控SQL语句:

 

代码如下:

 
SQL1:exec sp_executesql N'SELECT [Extent1].[RegionID] AS [RegionID], [Extent1].[RegionDescription] AS [RegionDescription] FROM [dbo].[Region] AS [Extent1] WHERE [Extent1].[RegionID] = @p0', N'@p0 int', @p0 = 1 
SQL2:exec sp_executesql N'update [dbo].[Region] set [RegionDescription] = @0where ([RegionID] = @1) ', N'@0 nchar(9),@1 int', @0 = N'TestTest1', @1 = 1 



ApplyPropertyChanges在MSDN的解释是“将已分离对象的属性更改应用于已附加到对象上下文的对象。”其实说白了就是 拿旧对象去更新新对象,我们可以看出 使用“ApplyPropertyChanges 修改实体”方法修改实体与 使用“传统模式”是一样的,都是必须先执行一次查询,获取更新的对象,但是 ApplyPropertyChanges方法的特殊之处是,该方法会拿内存中的对象(新对象)和当前连接中的对象(旧对象)对比,自动生成对应字段修改的Update语句,如果内存中的对象与当前连接中的对象完全相等(每个字段的值都相等),将不生成响应的Update。当我们再次执行 上述代码观察监控到了SQL语句,你会发现只监控到SQL1,不会得到SQL2。

3.使用Attach与SetModifiedProperty修改实体

代码如下:

 
using (NorthwindEntities context = new NorthwindEntities()) 
{ 
Region region = context.Region.FirstOrDefault(v => v.RegionID == 4); 
context.Detach(region); 
region.RegionDescription = "因为测试"; 

context.Attach(region); 
var newRegion = context.ObjectStateManager.GetObjectStateEntry(region); 
newRegion.SetModified(); 
newRegion.SetModifiedProperty("RegionDescription"); 

context.SaveChanges(); 
} 

监视SQL语句:
 

代码如下:


exec sp_executesql N'update [dbo].[Region]set [RegionDescription] = @0where ([RegionID] = @1)', N'@0 nchar(4),@1 int', @0 = N'因为测试', @1 = 4 

使用该方法,可以将不再当前连接集合中的实体使用Attach方法加入到当前集合中 在使用 SetModifiedProperty 来设置修改字段,使用该方法不必再执行查询将数据读入当前连接对象才能修改

本文来自:http://www.q1010.com/179/7373-0.html

注:关于ADO.NET EF中的实体修改方法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQLserver查询数据类型为ntext是空或NULL值的方法
  • SQLServer的备份和灾难恢复
  • Sqlserver2000 数据库备份实例代码
  • ASP.NET下向SQLServer2008导入文件实例操作方法
  • 用sql脚本创建sqlserver数据库范例语句
  • 用sql脚本创建sqlserver数据库触发器范例语句
  • sqlserver 模糊查询常用方法
  • sqlserver中distinct的用法(不重复的记录)
  • sqlserver中Case的使用方法(上下篇)第1/2页
  • SQLSERVER 表分区操作和设计方法
上一篇:SQL SERVER SQL语句优化方法30例(推荐)
下一篇:SQL SERVER 清空数据库中所有表记录 记录ID恢复从0开始
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。