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语句、视图及存储过程的更多相关文章

  1. 使用Entity Framework 自动产生的Sql语句

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

  2. Entity Framework Code First for SQL Compact

    这篇博客将介绍EF Code First中如何使用SQL Compact.SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0.微软的开发工具VS 201 ...

  3. Entity Framework查询,EF执行SQl

    一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...

  4. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  5. Entity Framework Code First学习系列

    Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...

  6. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  7. EF Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

    这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查 ...

  9. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

随机推荐

  1. Android 中 LayoutInflater 的使用

    一.LayoutInflater 的作用 我们一般使用 LayoutInflater 做一件事:View inflate(int resource, ViewGroup root); inflate( ...

  2. HTML5之文件API

    问题很简单,做个上传文件的页面. <!-- multiple代表可上传多个文件 --> <input type="file" id="file" ...

  3. The World's Only Advanced Operating System

    The World's Only Advanced Operating System

  4. Leetcode Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. Winform中创建超链接,点击跳转网页

    代码如下: System.Diagnostics.Process ie = new System.Diagnostics.Process();ie.StartInfo.FileName = " ...

  6. 整理 PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释:

    对你有助请点赞,请顶------送人玫瑰,手留余香! 1:58 2016/3/12 整理PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释: PHPsto ...

  7. BestCoder Round 70

    惨败,不能再嘲笑别人了,否则自己也会像别人那样倒霉 HDU 5615:http://acm.hdu.edu.cn/showproblem.php?pid=5615 求ax^2+bx+c能否拆成(px+ ...

  8. 初探javascript

    javascript是一种在网络广泛应用的脚本语言,虽然名字与java相近,但其实两者并没有直接的关系,脚本语言是一种为了便于操作和拓展功能而开发出来的解释性语言,不同于传统的编程语言,脚本语言不需要 ...

  9. Linux查看系统状态命令

    Linux查看系统状态命令       iostat iostat 命令详细地显示了存储子系统方面的情况.你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早 ...

  10. weex image

    weex 的image用来渲染图片, 可以使用img作为它的别名. 需要注意的是,他的长度可宽度必须指定, 不然它是不会工作的. 它没有任何的子组件. 有两个属性: src 用来指定图片的地址图片. ...