Entity Framework 中的Code First 中引入数据库函数
2016-04-25 10:08
239 查看
1,在项目中添加CodeFirstStoreFunctions包:
2,注册注册函数,FunctionsConvention第二个参数为函数定义所在的类
3,定义函数对应的方法,要入数据中函数签名一致
4,创建数据库函数
5,调用
Install-Package EntityFramework.CodeFirstStoreFunctions
2,注册注册函数,FunctionsConvention第二个参数为函数定义所在的类
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //注册函数 modelBuilder.Conventions.Add(new FunctionsConvention("dbo", this.GetType())); }
3,定义函数对应的方法,要入数据中函数签名一致
[DbFunctionAttribute("CodeFirstDatabaseSchema", "getDistance")] public static double get_distance(double curLat, double curLng, double srcLat, double srcLng) { throw new NotSupportedException(); }
4,创建数据库函数
protected override void Seed(EFDbContextMobile context) { context.Database.ExecuteSqlCommand(@"DROP FUNCTION IF EXISTS getDistance; CREATE FUNCTION getDistance(curLat DOUBLE, curLng DOUBLE, srcLat DOUBLE, srcLng DOUBLE) RETURNS DOUBLE BEGIN DECLARE dis DOUBLE; set dis = 6370996.81 * ACOS( COS(srcLat * PI() / 180) * COS(curLat * PI() / 180) * COS( srcLng * PI() / 180 - curLng * PI() / 180 ) + SIN(srcLat * PI() / 180) * SIN(curLat * PI() / 180)); RETURN dis; END"); }
5,调用
from moduleInfo in _shopInfoRepository.Entities select new ShopInfoBll() { PositionX = moduleInfo.PositionX, PositionY = moduleInfo.PositionX, Distance= EFDbContextMobile.get_distance(40.09914694048, 116.42105702279, moduleInfo.PositionY, moduleInfo.PositionX) }
相关文章推荐
- Redis键时间老化的测试
- MyBatis+MySQL数据库操作小技巧
- mysql复习
- MYSQL查询一段时间
- mysql56编码方式设置
- SQLPlus在连接时通常有四种方式
- MySQL(五) —— 子查询
- 如何彻底卸载MySQL
- 【SQL Server】最简单的存储过程
- 【.Net】文件并发(日志处理)--队列--Redis+Log4Net
- 【SQL Server】 基本操作
- oracle实用语句集锦
- mysql一些实用的语句
- (转载)数据库范式及宽表窄表理解
- arcgis 10.1 desktop安装oracle客户端,直连报错
- windows下的redis 2.x 配置
- SQLZOO(SELECT from WORLD Tutorial)Writeup
- sql clear dblog
- SQL查询优化:如何写出高性能SQL语句
- Linux操作系统安装memcached