Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Entity Framework 中执行T-sql语句

在Entity Framework 中执行T-sql语句

作者头像
张善友
发布于 2018-01-22 07:00:33
发布于 2018-01-22 07:00:33
2.5K0
举报
文章被收录于专栏:张善友的专栏张善友的专栏

从Entity Framework  4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery<T>ExecuteStoreCommand。

1、使用ExecuteStoreQuery<T> :通过sql查询返回object实体,有有许多需要注意:

1.sql = "select * from Payment where Vendor= @vendor";之所以能写成select *是因为Payment对象的属性和表的字段命名完全一致,如果不一致的话,需要将表字段取别名,别名需是对象映射的属性名称。

2.如果sql语句返回的列少于(具体化)实体的属性的个数,那么EF在具体化的时候将抛出一个异常如下图,因此将需要缺少的列补上一些没有意义的值,以保证在具体乎的时候不会报错:eg 如图1,如果sql=”select PaymentId ,Amount from Payment ” 这样使用context.ExecuteStoreQuery<Payment >(sql, args);那么会报异常,因此需要将Vendor 列补上 。正确的sql=”select PaymentId ,Amount, null as Vendor from Payment”

3.如果sql 返回的列 多余具体化的实体属性的个数,那么EF将会忽视多出的列。

4.如果是你返回的表是映射到几个继承关系的实体类上,那么返回的行需要具体化到几个实体上,EF是无法根据识别列来将返回的行具体化到相应的继承类型上去,这是EF会抛出一个运行时的exception

5.如果实体有complex Type属性,那么实体对象的实例是无法用ExecuteStoreQuery()来返回的,因为ExcuteStoreQuery()是无法返回一个complex Type的集合的.返回单个complex type是支持的,但是返回的实体对象里包含complex type就不支持。

6.可以返回实体对象属性的子集,就是说如果对于Payment表,我们查询返回PaymentId和Amount字段,然后我们定义一个subPayment 实体包含PaymentId和Amount属性,然后使用ExcuteStoreQuery<subPayment>()

2、使用ExecuteStoreCommand:这个更加灵活,你可以执行Update,Insert,Delete语句。

代码语言:js
AI代码解释
复制
using (SzmbEntities entity = new SzmbEntities()) 
{    
         var item = entity.Weatherwarnings.OrderByDescending(x=>x.Id)    
                    .Where(x => x.PublishTime < now.AddDays(-14))    
                    .FirstOrDefault();    
          if (item != null)    
          {    
                string sql = "Delete FROM  [Weatherwarning] where Id < @ID";    
                 var args = new DbParameter[] {    
                    new SqlParameter { ParameterName = "ID", Value = item.Id}    
                 };    
                 entity.ExecuteStoreCommand(sql,args);    
           }    
  }

ExecuteStoreCommand()返回一个int值,影响的行数。

相关文章:

Entity Framework 和 AppFabric 中的二级缓存

对Entity Framework应用二级缓存

Performance Considerations for Entity Framework 5

https://github.com/ChrisNanda/EntityFramework.Cache

Entity Framework - Second Level Caching with DbContext

Application using Entity Framework's Code First to dynamically connect to two different databases

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-11-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Entity Framework 4 的 POCO学习
Entity Framework 4的特性介绍可看这篇文章 .NET 4中Entity Framework简介,其中最感兴趣的一点就是对POCO的支持了:EF4为实体提供了简单传统CLR对象(Plain Old CLR Object / POCO)支持。您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)和领域驱动设计(domain-driven design)。同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也会自动修正对导航属性(
张善友
2018/01/30
1.2K0
Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)
在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制。
老马
2022/05/10
8310
Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)
Entity Framework 4.1 Code-First 学习笔记
  CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库的工作方式。Entity Framework 4.1在你的实体不派生自任何基类、不添加任何特性的时候正常的附加数据库。另外呢,实体的属性也可以添加一些标签,但这些标签不是必须的。下面是一个简单的示例:
拓荒者IT
2019/09/25
1.7K0
Entity Framework快速入门
实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。
老马
2022/05/10
5650
Entity Framework快速入门
Entity Framework(EF) 5
在Entity Framework宣布开源后不久Entity Framework(EF) 5就正式发布了,ADO.NET官方博客上EF5 Released列出了EF5的新特性: 枚举类型支持 性能增强,特别是.NET 4.5中 自动使用localDb及SQLServerExpress Spatial types Table Valued Functions 带有多个结果集的存储过程 兼容性方面支持Visual Studio 2010 和 Visual Studio 2012 上的 .NET 4.0 和4.5
张善友
2018/01/31
1K0
Entity Framework Core 简介
今天来讲解一下 .NET 中的重要成员 Entity Framework Core。Entity Framework Core (以下简称 EF Core),是 EF6 之后微软推出的开源的轻量级可扩展跨平台 ORM 框架。 EF Core 需要和 .NET Core 应用程序一起使用,并且需要 .NET 4.5+ 版本。下面列举一下 EF Core 所支持的项目类型:
喵叔
2020/09/08
2K0
Entity Framework快速入门--ModelFirst
Entity Framework带给我们的不仅仅是操作上的方便,而且使用上也很是考虑了用户的友好交互,EF4.0与vs2010的完美融合也是我们选择它的一个理由吧。相比Nhibernate微软这方面做的的确是很不错。
老马
2022/05/10
3830
Entity Framework快速入门--ModelFirst
【原】尝试 Entity Framework POCO功能+Code First
Entity Framework 2.0中添加了的支持POCO(Plain Old CLR Object)的功能,这使得EF的功能越来越强大了。
老马
2022/05/10
5770
【原】尝试 Entity Framework POCO功能+Code First
Entity Framework快速入门--CodeOnly POCO
前几篇文章我简单介绍了Entity Framework的概念以及介绍了Database First方式实例和Model First方式实例。今天我们将介绍另外一种令人兴奋的开发方式:CodeOnly!当然EF对于POCO(Plain Old CLR Object)的支持是EF4.0中的一大特性。也是EF可扩展性提高的一大进步。废话少说,也是简单给大家演示一下操作的步骤!先简单说一下流程,然后再看下面的截图!
老马
2022/05/10
4200
Entity Framework快速入门--CodeOnly POCO
Entity Framework 简单查询
第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework。那么同时会给packages.config和App.config添加相应的配置。
aehyok
2018/09/11
8580
Entity Framework 简单查询
.NET EF Core(Entity Framework Core)
1、Entity Framework Core(EF Core)是微软官方的ORM框架。优点:功能强大、官方支持、生产效率高、力求屏蔽底层数据库差异;缺点:复杂、上手门槛高、不熟悉EFCore的话可能会进坑。 2、Dapper。优点:简单,N分钟即可上手,行为可预期性强;缺点:生产效率低,需要处理底层数据库差异。 3、EF Core是 模型驱动 (Model-Driven)的开发思想,Dapper是 数据库驱动(DataBase-Driven)的开发思想的。没有优劣,只有比较。 4、性能: Dapper等≠性能高;EF Core≠性能差。 5、EF Core是官方推荐、推进的框架,尽量屏蔽底层数据库差异,.NET开发者必须熟悉,根据的项目情况再决定用哪个。
鱼找水需要时间
2024/03/23
7130
.NET EF Core(Entity Framework Core)
.NET:Entity Framework 笔记
有二年没关注EF,今天无意试了下发现跟主流的Hibernate等ORM框架越来越接近了,先看下Entity类的定义: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace EFSample.Model { [Table("T_ORDER")]
菩提树下的杨过
2018/01/19
1K0
在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
在《实现存储过程的自动映射》中,我通过基于T4的代码生成实现了CUD存储过程的自动映射。由于映射的都是基于数据表结构的标准的存储过程,所以它们适合概念模型和存储模型结构相同的场景。如果两种模型存在差异,在进行数据更新操作的时候就会出错。本篇文章主要介绍当概念模型中具有继承关系的两个实体映射到数据库关联的两个表,如何使用存储过程。 目录 一、创建具有继承关系的实体 二、基于继承关系实体的查询与更新 三、映射标准的CUD存储过程 四、修正存储过程 一、创建
蒋金楠
2018/02/07
1.6K0
在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
详解MyBatis中Executor执行SQL语句的过程
在详解MyBatis的SqlSession获取流程文章中已经知道,MyBatis中获取SqlSession时会创建执行器Executor并存放在SqlSession中,通过SqlSession可以获取映射接口的动态代理对象,动态代理对象的生成可以参考详解MyBatis加载映射文件和动态代理,可以用下图进行概括。
每周聚焦
2023/03/07
1.2K0
Entity Framework 并发冲突解决方案
在大多数的应用中都会出现客户端同时发送多个请求对同一条数据就行修改,这个时候就会出现并发冲突。我们一般的做法会有如下两种:
喵叔
2020/09/08
8930
Entity Framework 并发冲突解决方案
在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?
继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关于文中涉及的这个问题,我个人觉得是EF一个有待改进的地方,不知道各位看官是否同意? 目录 一、EF存储过程参数赋值的版本策略 二、Delete存储参数就一定是Original值吗? 三、如果直接修改.edmx模型的XML呢? 四、为Delete存储过程参数赋上Current值,如何做得到? 一、
蒋金楠
2018/02/07
1.9K0
在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?
Entity Framework——执行sql语句
EF版本:6.0.0 EF对大量数据或多表连接一次操作耗时较大,或要求响应时间尽可能小,因此采用EF框架执行SQL语句的方案 1DbContext.Database 这个类包含了大量的操作方法,见截图
甜橙很酸
2018/03/08
3.9K1
Entity Framework——执行sql语句
在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回
本篇文章通过实例的方式,讨论两个在EF使用存储过程的主题:如何通过实体和存储过程的映射实现逻辑删除;对于具有自增长类型主键的数据表,在进行添加操作的时候如何将正确的值反映在实体对象上。 目录 一、基于逻辑删除的数据表和存储过程定义 二、如何过滤逻辑删除记录 三、具有自增长列的存储过程定义 四、通过Result Columns Binding将结果集的列于实体属性进行绑定 一、基于逻辑删除的数据表和存储过程定义 较之物理删除(记录彻底从数据表中清除掉),
蒋金楠
2018/02/07
1.8K0
在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回
Entity Framework Core 2.0 新特性
本文介绍了EF Core 2.0的新特性和改进,包括实体、表、查询、性能提升和查询方面的内容。
GuZhenYin
2018/01/04
4K0
Entity Framework(EF)数据查询
EF,有一个容器管理着里面所有附着在其上的对象。它们通过一种叫Object Tracking的机制来跟踪对象的变化,以便于在用户需要的时候把这些变化持久化到数据库中去。有时候,我们可能并不需要改动数据(比如我们只是简单地取出一个Entity然后把它绑定到UI上面去),那么在这个时候,Tracking机制就比较多余了。在EF中,我们可以以MergeOption.NoTracking=false来取得同样的效果。
javascript.shop
2019/09/04
1K0
相关推荐
Entity Framework 4 的 POCO学习
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档