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 ...
随机推荐
- unity3d UGUI多语言
从Foundation插件中抽离出的多语言.原理很简单,给Text绑定key,在程序开始时设置本地语言即可. 目录结构: LanguageEditor.cs:自定义编辑器: LanguageServi ...
- CentOS 6.5 Python Image Library 配置
转自:http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html PIL 下载: http://www.pythonware ...
- jQuery的加法运算.
jQuery的加法运算. 加法运算 ?想必大家听到这都会不屑了,加法运算这是多么简单的运算.然而有的时候在jQuery也让人挺头疼的. 常规的是: var num1 = 123; var num2=1 ...
- Windows下ADT环境搭建
1.JDK安装 下载JDK(点我下载),安装成功后在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: JAVA_HOME值为C:\Program Files ...
- Web Components初探
本文来自 mweb.baidu.com 做最好的无线WEB研发团队 是随着 Web 应用不断丰富,过度分离的设计也会带来可重用性上的问题.于是各家显神通,各种 UI 组件工具库层出不穷,煞有八仙过海之 ...
- >xx.hbm.xml的一些简单配置
1.在hibernate-mapping的属性里有一个package,它的意思是以下的类都是在这个包下的,下面写类路径的时候,可以不写包名 2.class标签 name属性指的是类 table属性指的 ...
- 安装wampserver遇到,无法启动此程序,丢失MSVCR110.dll
这个问题遇到多次了,根据网上的解决办法,下载这个动态链接库文件,安装到指定位置重启系统后还是解决不了,其实这个文件有时候是存在的也会出现这个问题.问题截图如下 其实这个我认为是系统缺少了相关组组件的安 ...
- CentOS6.5安装Eclipse
安装说明 1.安装环境: CentOS6.5 64位系统 2.安装方式:tar.gz安装 3.软 件 包:eclipse-jee-luna-SR1-linux-gtk-x86_64.tar.gz 4. ...
- js判断地址转向
<script type="text/javascript"> if (navigator.userAgent.search(/iphone|ipod|ipad|And ...
- ASP.NET Core 数据保护(Data Protection 集群场景)【下】
前言 接[中篇],在有一些场景下,我们需要对 ASP.NET Core 的加密方法进行扩展,来适应我们的需求,这个时候就需要使用到了一些 Core 提供的高级的功能. 本文还列举了在集群场景下,有时候 ...