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学习笔记(三)-- ...
随机推荐
- AVQueuePlayer
想要视频一个接一个的无缝连续播放么? 还在用mpmovieplayercontroller么?out了! 介绍一个可以实现无缝连续播放视频的东西-------AVQueuePlayer ! AVQue ...
- python下载服务器
大佬们,你们还在为传输文件时利用U盘插拔而苦恼吗,还在为设置文件共享而苦恼吗?别苦恼了,教你一秒实现文件的传输. 首先我们都要有python环境,这个肯定有. 下面就是一秒,在你要传的文件的目录下输入 ...
- 安装win10提示“我们无法创建新的分区,也找不到现有分区”
用U盘安装操作系统,但是遇到了这种问题. 出现这种情况可能是硬盘格式通过指令写死了,所以我们需要通过指令把格式清零, 补充: 其实系统找不到系统分区这种情况其实就是引导程序出了问题,可以用大白菜这种w ...
- jar/war文件的解释
http://blog.csdn.net/tang_123_/article/details/6012202#comments
- SpringBoot: 3.SpringBoot整合filter(转)
整合方式一:通过注解扫描完成 Filter 组件的注册 1.编写filter package com.bjsxt.filter; import javax.servlet.*; import java ...
- flask(3.0)
目录 一.Flask - CBV 二.Flask - Session 1.安装flask-session 2.回顾flask自带的session的使用方法 3.flask-session的使用(以保存 ...
- C# WindowService 动态修改服务名
serviceInstaller1中可以设置服务名,描述等 在实际情况中,我们可能需要将Service多开来达到我们的目的,但是安装两次以上会有错误提示,因为服务名已经重复了,这个时候,我们需要动态改 ...
- mysql数据库查找数据的方法。
今日内容 1.外键的变种 唯一索引:关键字 unique(num) 作用:使指定的列,中的属性不能重复,并且加速查找案例:create table t5(id int,num int,unique(n ...
- Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II)
Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II) 股票问题: 121. 买卖股票的最佳时机 122. ...
- [转帖]兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍
兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍 2019-06-20 09:56:38作者:linux人稿源:快科技 https://ywnz.com/linu ...