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", 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<DestinationSummary>("dbo.GetDestinationSummary @p0, @p1", country, keyWords);