在Entity Framework 中执行T-sql语句

简介:

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

1、使用ExecuteStoreQuery :通过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(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()

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

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值,影响的行数。

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

目录
相关文章
|
7月前
|
SQL XML Java
【SQL用法】Mybatis框架中的xml文件中经常使用的sql语句
【SQL用法】Mybatis框架中的xml文件中经常使用的sql语句
72 0
|
SQL Java 关系型数据库
Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?
JSqlParser是一个用Java编写的SQL解析器,可以将SQL语句解析为Java对象,从而使开发人员能够轻松地分析、修改和重构SQL查询。
677 0
|
SQL XML Java
(三)mybatisPlus自定义Sql语句
mybatisPlus自定义Sql语句 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
318 0
(三)mybatisPlus自定义Sql语句
|
SQL Java 关系型数据库
java执行自定义sql时报错 error in your SQL syntax;
java执行自定义sql时报错 error in your SQL syntax;
147 0
java执行自定义sql时报错 error in your SQL syntax;
|
SQL Java 关系型数据库
JavaJDBC异常记录:关于sql上能够正常执行的sql语句,在java中执行了但是返回结果不一致问题
今天在写关于JDBC程序时出现了一个异常就是sql语句在mysql中可以正常执行,在java中也能正常执行,但是二者返回结果却不一致。
JavaJDBC异常记录:关于sql上能够正常执行的sql语句,在java中执行了但是返回结果不一致问题
|
SQL XML 存储
flowable 输出 sql 语句
flowable 输出 sql 语句
976 0
|
SQL .NET
一起谈.NET技术,看看Entity Framework 4生成的复杂的分页SQL语句
  之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题。   >>> 来看一看,瞧一瞧!   上代码:   看生成的SQL语句:   1. Entity Framework生成的SQL:   一个TOP,三个FROM。
979 0
|
SQL 数据库
一起谈.NET技术,linq2sql:直接执行sql语句
  1、ExecuteQuery方法   看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该“所思非所得”。
1367 0
|
SQL Java 数据库连接
Hibernate 执行 SQL 查询
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732077 ...
1755 0