博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework Code First执行SQL语句、视图及存储过程
阅读量:4960 次
发布时间:2019-06-12

本文共 5109 字,大约阅读时间需要 17 分钟。

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
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
{ public VCityMap() { // Primary Key this.HasKey(t => t.CityID); // Properties this.Property(t => t.CityID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); this.Property(t => t.ProvinceNo) .HasMaxLength(10); this.Property(t => t.ProvinceName) .HasMaxLength(50); this.Property(t => t.CityNo) .HasMaxLength(10); this.Property(t => t.CityName) .HasMaxLength(50); // 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
(null); } public PortalContext() : base("Name=PortalContext") { } public DbSet
Cities { get; set; } public DbSet
Provinces { get; set; } public DbSet
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
("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", 3);    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
("dbo.GetDestinationSummary @p0, @p1", country, keyWords);

原文链接:

转载于:https://www.cnblogs.com/1175429393wljblog/p/10778504.html

你可能感兴趣的文章
webRTC-实时流媒体的福音
查看>>
[转]PHP $_SERVER变量中的 HTTP_HOST 和 SERVER_NAME
查看>>
简易c语言文法
查看>>
[QA]UrlRewriter无法解析实际存在的htm文件
查看>>
记一次因为索引维护导致批量无法继续的情况
查看>>
poj 2195 (最小费用最大流)
查看>>
HCA数据下载
查看>>
Codeforces 954 G. Castle Defense
查看>>
反射机制-----------通过它获取类中所有东西 出了注释
查看>>
svn的一个连接
查看>>
position:fixed和z-index:1
查看>>
unity, 延迟执行代码
查看>>
mysq找不到pid无法正常启动
查看>>
php实现抓取网站百度快照和百度收录数量的代码实例
查看>>
Qt那点事儿(三) 论父对象与子对象的关系
查看>>
jar 命令 打包装class文件的文件夹
查看>>
node.js express配置允许跨域
查看>>
JSP EL表达式详细介绍(转)
查看>>
要想找出正好包含5个字符的名字
查看>>
用js把图片做的富有动态感,并对以后需要用着的属性进行封装
查看>>