Entity Framework Code First执行SQL语句、视图及存储过程
1、Entity Framework Code First查询视图
Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table一样的方式进行插入、修改、删除及查询。在实际的项目过程中,视图多只用于进行查询。
Entity Framework Code First查询视图示例:
使用到的表及视图结构如下:

文件类VCity.cs:
using System;
using System.Collections.Generic; namespace Portal.Models
{
public class VCity
{
public int CityID { get; set; }
public Nullable<int> ProvinceID { get; set; }
public string ProvinceNo { get; set; }
public string ProvinceName { get; set; }
public string CityNo { get; set; }
public string CityName { get; set; }
}
}
映射文件类VCityMap.cs:
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration; namespace Portal.Models.Mapping
{
public class VCityMap : EntityTypeConfiguration<VCity>
{
public VCityMap()
{
// Primary Key
this.HasKey(t => t.CityID); // Properties
this.Property(t => t.CityID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); this.Property(t => t.ProvinceNo)
.HasMaxLength(); this.Property(t => t.ProvinceName)
.HasMaxLength(); this.Property(t => t.CityNo)
.HasMaxLength(); this.Property(t => t.CityName)
.HasMaxLength(); // Table & Column Mappings
this.ToTable("VCity");
this.Property(t => t.CityID).HasColumnName("CityID");
this.Property(t => t.ProvinceID).HasColumnName("ProvinceID");
this.Property(t => t.ProvinceNo).HasColumnName("ProvinceNo");
this.Property(t => t.ProvinceName).HasColumnName("ProvinceName");
this.Property(t => t.CityNo).HasColumnName("CityNo");
this.Property(t => t.CityName).HasColumnName("CityName");
}
}
}
文件类PortalContext.cs:
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using Portal.Models.Mapping; namespace Portal.Models
{
public class PortalContext : DbContext
{
static PortalContext()
{
Database.SetInitializer<PortalContext>(null);
} public PortalContext()
: base("Name=PortalContext")
{
} public DbSet<City> Cities { get; set; }
public DbSet<Province> Provinces { get; set; }
public DbSet<VCity> VCities { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CityMap());
modelBuilder.Configurations.Add(new ProvinceMap());
modelBuilder.Configurations.Add(new VCityMap());
}
}
}
文件类Program.cs,用于查询视图:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Portal.Models;
namespace Portal
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new PortalContext())
{
foreach (var vCity in ctx.VCities)
{
Console.WriteLine("{0}-{1}-{2}-{3}-{4}-{5}", vCity.CityID, vCity.ProvinceID, vCity.ProvinceNo, vCity.ProvinceName, vCity.CityNo, vCity.CityName);
}
} Console.ReadKey();
}
}
}
2、Entity Framework Code First执行SQL语句
在使用Entity Framework Code First时,当需要直接执行SQL时,可以使用SqlQuery方法。SqlQuery方法采用属性名即列名的方法进行映射查询,要求返回的查询结果均有完全对应的类属性。
1>、已定义的表映射类查询
using (var ctx = new PortalContext())
{
var provincelist = ctx.Provinces.SqlQuery("SELECT TOP 10 * FROM Province");
foreach (var province in provincelist)
{
Console.WriteLine("{0}-{1}-{2}", province.ProvinceID, province.ProvinceNo, province.ProvinceName);
}
}
2>、未有定义表的临时SQL语句查询
示例:需要查询Province表中的ProvinceNo,ProvinceName,首先定义一个临时类TempProvince.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Portal.Models
{
public class TempProvince
{
public string ProvinceNo { get; set; }
public string ProvinceName { get; set; }
}
}
执行SQL语句查询:
using (var ctx = new PortalContext())
{
var provincelist = ctx.Database.SqlQuery<TempProvince>("SELECT TOP 10 ProvinceNo,ProvinceName FROM Province");
foreach (var province in provincelist)
{
Console.WriteLine("{0}-{1}", province.ProvinceNo, province.ProvinceName);
}
}
3、Entity Framework Code First执行存储过程
Entity Framework Code First执行存储过程同样是使用SqlQuery方法。
创建存储过程:
CREATE PROCEDURE GetCityByProvinceID
(
@ProvinceID INT
)
AS
SELECT * FROM City
WHERE ProvinceID = @ProvinceID
执行存储过程:
using (var ctx = new PortalContext())
{
var cityList = ctx.Cities.SqlQuery("dbo.GetCityByProvinceID @p0", );
foreach (var city in cityList)
{
Console.WriteLine("{0}-{1}-{2}-{3}", city.CityID, city.ProvinceID, city.CityNo, city.CityName);
}
}
存储过程多个输入参数:
var country = "Australia";
var keyWords = "Beach, Sun";
var destinations = context.Database.SqlQuery<DestinationSummary>("dbo.GetDestinationSummary @p0, @p1", country, keyWords);
Entity Framework Code First执行SQL语句、视图及存储过程的更多相关文章
- 使用Entity Framework 自动产生的Sql语句
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- Entity Framework Code First for SQL Compact
这篇博客将介绍EF Code First中如何使用SQL Compact.SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0.微软的开发工具VS 201 ...
- Entity Framework查询,EF执行SQl
一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- Entity Framework Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- EF Core 执行SQL语句和存储过程
无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程
这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查 ...
- 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...
随机推荐
- Android 中 LayoutInflater 的使用
一.LayoutInflater 的作用 我们一般使用 LayoutInflater 做一件事:View inflate(int resource, ViewGroup root); inflate( ...
- js 判断浏览器和ie版本号 收集
function testB () { // body... var isOpera = !!window.opera ||!!window.opr|| navigator.userAgent.ind ...
- POI3.8解决导出大数据量excel文件时内存溢出的问题
POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用.SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行数据的加入 ...
- ceil 模块
# 有时需要得到一个最小的整数,而这个数只能比自己大或相等,不能小于自己 #如: 2.1 我们需要得到的最小整数为3,即使后一位只有很小的一部分,一般用于分页 from math import cei ...
- ruby开发环境配置
环境:win7 64位 软件:Ruby2.2.5,devkit对应版本,rubygems,rails 一:安装Ruby 1.在这个网站:http://rubyinstaller.org/downloa ...
- int.Parse()之异常
首先对不起各位读者,我必须发泄一下,为了清明节能顺利的去洛阳玩,我周四赶出了一篇博客,就在快写完提交的时刻,11:30分断网了!!断网了!!断!!网!!了!!是的,你没有听错,他就这样毫无征兆的断网了 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- socket编程学习step1
socket学习参考链接,赞一个:http://blog.csdn.net/hguisu/article/details/7445768 sockets(套接字)编程有三种,流式套接字(SOCK_ST ...
- VS2012 2013 显示查找功能 无法具体定位 解决方法
问题的现象:通过使用 Ctrl + Shift + F 也就是Find In Files功能,使用之后只能显示统计结果,不显示具体行.如下图 regedit 中在注册表中查找:HKEY_CLA ...
- 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...