在Entity Framework 中执行T-sql语句
来源:互联网 发布:渗透软件 编辑:程序博客网 时间:2024/06/05 02:10
http://www.cnblogs.com/shanyou/archive/2012/11/18/2776357.html
从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语句。
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 中执行T-sql语句
- Entity Framework直接执行SQL语句
- Entity Framework直接执行SQL语句
- Entity Framework执行Sql语句返回DataTable
- Entity Framework执行Sql语句返回DataTable
- Entity Framework 执行sql语句 存储过程
- entity framework执行sql
- Entity framework 执行sql
- entity framework 6.0 EF6 执行存储过程,sql语句
- Entity Framework Core 执行SQL语句和存储过程
- Entity Framework Core 执行SQL语句和存储过程
- entity framework 直接执行查询语句
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- SimpleDateFormat使用详解
- 网页脚本发生错误 'jQuery'未定义解决办法
- 将eclipse中的web项目部署到本地的tomcat上
- 黑马程序员c#学习7
- Oprofile 移植到Android
- 在Entity Framework 中执行T-sql语句
- ehcache memcache redis 三大缓存男高音
- Java 终止线程
- Oracle分区之三:索引分区
- 有问题啊,怎么没有声音呢
- 资料重温——自定义对话框(来源于torryPages)
- 黑马程序员c#学习8
- ALSA(Advanced Linux Sound Architecture)声卡编程介绍
- Android深度探索(卷1):安装C/C++交叉编译环境