MVC4学习要点记四
一、使用原生SQL
使用EF的一个优点就是自动帮我们生成SQL,这在常规情况下很方便,但有些情况下用EF却不适合。
另外还有些特别复杂的语句,利用EF很难生成。
所以,EF提供一组方法用来执行原生的SQL。有以下三种:
1.DbSet.SqlQuery
2.Database.SqlQuery
3.Database.ExecuteSqlCommand
下面分别说明其用法。
1、DbSet.SqlQuery
DbSet.SqlQuery查询并返回Entities
方框中的和注释掉的内容SysUser sysUser=db.SysUsers.Find(id)完全一样。
2、Database.SqlQuery
Database.SqlQuery 返回其他类型
例如:
string query = "select loginName from SysUser";
var names=db.Database.SqlQuery<string>( query).ToList();
以上会返回一个System.Collections.Generic.List<string>类型。
这种方式和第一种情况最大的区别就是返回non-entity 类型。
我们可以根据需要,自己构建需要的类型。
我们也可以自定义一个entity type让它返回,例如类似我们上一个例子:
SysUser sysUser = db. Database.SqlQuery(query, paras).SingleOrDefault();
这样也可以返回entity,
但要注意,这种方式将不会被context track,
返回后就没关系了,如果我们在View中用类似于Model.XXX导航属性获取其他关联数据就会报错。例如@foreach (var item in
Model.SysUserRoles),这种情况下会报Model为null的错误。
3、Database.ExecuteSqlCommand
最后一个是更新的,直接看示例就明白了:
context.Database.ExecuteSqlCommand("UPDATE
dbo.Posts SET Rating = 5 WHERE Author = @author", new
SqlParameter("@author", userSuppliedAuthor));
存储过程用法类似。
二、原生SQL使用总结
1、原生SQL执行查询:
需要返回实体模型,使用DbSet.SqlQuery (context会跟踪,等效于LINQ方式)
需要返回其他类型,使用Database.SqlQuery(context不会跟踪)
2、原生SQL执行更新:
使用Database.ExecuteSqlCommand
内容来源:
http://www.cnblogs.com/kevin2013/p/5239190.html
MVC4学习要点记四的更多相关文章
- MVC4学习要点记三
一.数据迁移用来解决code first情况下当增加.删除.改变实体类,或改变DbContext类后,相应地更新数据库结构而不会对现有数据产生影响. 1.启用迁移指令:enable-migration ...
- MVC4学习要点记二
一.分页(PagedList.MVC)1.安装PagedList.MVCPM>install-package PagedList.mvc 2.控制器中使用PagedList 3.csht ...
- MVC4学习要点记一
强类型的辅助方法:这些helper的特征是名称后面加上了 For , 这些叫做强类型的辅助方法. 共用布局页:可以在Views文件夹下面新建一个视图页,命名为_ViewStart.cshtml,将这部 ...
- EntityFramework学习要点记一
一.Entity的注解属性(Annotations)不管是code first还是db first,都需要用到注解属性,至于用System.ComponentModel.DataAnnotations ...
- 【C#】第3章学习要点(一)--整体把握
分类:C#.VS2015 创建日期:2016-06-18 使用教材:(十二五国家级规划教材)<C#程序设计及应用教程>(第3版) 一.使用别人已经设计好的类简化你的代码编写工作量 当让你去 ...
- javascript基础学习(十四)
javascript之表单对象 学习要点: 表单对象 文本框 按钮 单选框和复选框 一.表单对象 在HTML文档中可能会出现多个表单,也就是说,一个HTML文档中可能出现多个<form>标 ...
- springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用
springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用 主要内容: 这篇文章主要是总结之前使用springmv接收json的时候遇到的问题,下面通过前台发送a ...
- 【Silverlight】Bing Maps学习系列(四):使用图钉层(Pushpin layer)及地图图层(MapLayer)(转)
[Silverlight]Bing Maps学习系列(四):使用图钉层(Pushpin layer)及地图图层(MapLayer) 如果我们需要在Bing Maps中加入一个小图钉标记,该如何实现了? ...
- JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
随机推荐
- PIMPL(private implementantion)模式(转载)
前记:请搜索PIMPL(private implementantion)模式和桥接模式, PIMPL是桥接模式的一种典型实现 以下转自:http://blog.csdn.net/nrc_douning ...
- visible,invisible和GONE的区别
在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible ”.“invisible”.“gone”.主要用来设置控制控件的显示和隐藏.有些人可能会疑惑In ...
- 京东商城跨域设置Cookie实现SSO单点登陆过程
可以先看下这边文章:http://blog.chinaunix.net/uid-25508399-id-3431705.html 1.点击首页的登陆按钮跳转到京东的登陆中心https://pass ...
- Qt编写自定义控件13-多态进度条
前言 多态进度条,顾名思义,有多重状态,其实本控件主要是用来表示百分比进度的,由于之前已经存在了百分比进度条控件,名字被霸占了,按照先来先得原则,只好另外取个别名叫做多态进度条,应用场景是,某种任务有 ...
- CentOS8 使用 aliyun 阿里云 镜像站点的方法
CentOS8现已可使用国内的aliyun阿里云镜像站,方法如下: 用cd命令切换到yum.repos目录,备份原始的3个repo文件:cd /etc/yum.repos.d/sudo cp Cent ...
- MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解
转 http://blog.csdn.net/hsd2012/article/details/51112009 转 http://blog.csdn.net/e421083458/article/de ...
- centos7操作
一.安装系统 1.下载(Minimal ISO)http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1 ...
- C#.NET中对称和非对称加密、解密方法汇总--亲测可用
C#.NET中对称和非对称加密.解密方法汇总--亲测可用 在安全性要求比较高的系统中都会涉及到数据的加密.解密..NET为我们封装了常用的加密算法,例如:MD5,DES,RSA等.有可逆加密,也有 ...
- maven-1-是什么
背景 1.1. 场景 假如你正在Eclipse下开发两个Java项目,姑且把它们称为A.B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢? 很简单,这不就是跟我们之前写程 ...
- 禁止crontab -r清空定时任务列表误操作
关于crontab 1.附件cron.sh放/usr/bin目录下面 2.在/etc/bashrc文件末尾添加 alias crontab='/usr/bin/cron.sh' 或者在当前root用户 ...