这份工作一直以来都用Oracle数据库,先前都是直接用的ADO.NET但是写包跟存储过程是一个很头疼的事情,满足不了快速开发的需求。

一直常识找比较好用的ORM,先前用的Entity Framework不错,但是用于Oracle的话,服务器跟VS端都得装插件,最近从群里面的网友那得知ELINQ不错

就尝试用用。

对于我这样的ELINQ初学者来说,比较容易上手,唯一不足的就是网上的文档相对较少,我会一点一点的把自己这个学习过程中遇到的问题都写到博客园,供大家分享!

技术不行,不喜勿喷啊,呵呵!

首先我们创建一个文章实体ArticleContent

 using System;
 namespace GeoCms.Models
 {
     public class ArticleContent
     {
         public int ID { get; set; }
         public string Title { get; set; }
         public string Image { get; set; }
         public string Summary { get; set; }
         public string Content { get; set; }
         public DateTime PubTime { get; set; }
         public int ViewCount { get; set; }
         public int CateID { get; set; }

         public ArticleCategory Category { get; set; }
     }
 }

其中有个多对一的属性ArticleCategory,代码如下:

 using System.Collections.Generic;

 namespace GeoCms.Models
 {
     public class ArticleCategory
     {
         public int ID { get; set; }
         public string Name { get; set; }
         public int ParentID { get; set; }

         public IList<ArticleContent> Contents { get; set; }

     }
 }

IList<ArticleContent>表明一个ArticleCategory有多个ArticleContent

ArticleContent跟ArticleCategory是一对多的关系

最后我们新建dbcontext,代码如下:

 using System;
 using NLite.Data;

 namespace GeoCms.Models
 {
     public class CmsDbContext:DbContext
     {

         const string connectionstring = "OracleConenction";
         static NLite.Data.DbConfiguration dbConfig = NLite.Data.DbConfiguration
             .Configure(connectionstring)
             .SetSqlLogger(() => new SqlLog(Console.Out))
             .AddClass<Models.ArticleCategory>(m=> {
                 //自动增长
                 m.Id(c => c.ID).DbGenerated();
                 //这里很重要,设置自动增长列的序列,在创建table时候会自动创建序列
                 m.SequenceId(c => c.ID).SequenceName("SEQU_ArticleCategory");
                 //一对多(一个分类对应多个文章)
                 m.OneToMany<Models.ArticleContent>(c => c.Contents).ThisKey(c => c.ID).OtherKey(c => c.CateID);
             })
             .AddClass<Models.ArticleContent>(m=>{
                 //自动增长
                 m.Id(e => e.ID).DbGenerated();
                 //设置并创建序列
                 m.SequenceId(e => e.ID).SequenceName("SEQU_Articles");
                 //设置一对一(一个文章对应一个分类)
                 m.OneToOne<Models.ArticleCategory>(a => a.Category).ThisKey(a => a.CateID).OtherKey(c => c.ID);
             });

         public CmsDbContext():base(dbConfig)
         {

         }

         public readonly IDbSet<Models.ArticleCategory> ArticleCategory;
         public readonly IDbSet<Models.ArticleContent> Article;

     }
 }

最后我们到Global.asax的Application_Start事件中去创建数据表
在事件中添加如下代码:

 Models.CmsDbContext db = new Models.CmsDbContext();
             if (db.DbHelper.DbConfiguration.DatabaseExists())
             {
                 db.DbHelper.DbConfiguration.CreateTables();
             }

关于Oracle数据库的链接字符串,各位自己去百度,这里就不多说了

运行预览,生成的数据表如下

Elinq+Oracle的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  3. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. 基于Oracle安装Zabbix

    软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...

  7. Oracle Database 12c Data Redaction介绍

    什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...

  8. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  9. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

随机推荐

  1. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  2. angular实现统一的消息服务

    后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...

  3. 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)

    建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...

  4. openresty 前端开发入门四之Redis篇

    这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用到了lua-resty-redis库,代码可以在github上找得到 而且 ...

  5. 云计算下PAAS的解析一

    云计算下PAAS的解析一       PaaS是Platform-as-a-Service的缩写,意思是平台即服务. 把服务器平台作为一种服务提供的商业模式.通过网络进行程序提供的服务称之为SaaS( ...

  6. 深入理解DOM节点操作

    × 目录 [1]创建节点 [2]插入节点 [3]移除节点[4]替换节点[5]复制节点 前面的话 一般地,提起操作会想到“增删改查”这四个字,而DOM节点操作也类似地对应于此,接下来将详细介绍DOM的节 ...

  7. angular2之前端篇—1(node服务器分支)

    上一篇.net core和angular2之前端篇-1 使用的是dotnet模板.之所以用它,因为想用他写webapi,但是写道下一篇的时候遇到点问题,所以先写个分支测试一下.这次是用Node作为服务 ...

  8. Android 扫描条形码(Zxing插件)

    使用Android Studio 一.在build.gradle(Module:app)添加代码  下载,调用插件 1 apply plugin: 'com.android.application' ...

  9. Android6.0运行时权限管理

    自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...

  10. java中判断字符串是否为只包含数字

    1.用Java自带的函数 public static boolean isNumeric(String str){ for(int i=str.length();--i>=0;){ if (!C ...