这份工作一直以来都用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. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

  2. 使用UIBezierPath绘制图形

    当需要画图时我们一般创建一个UIView子类, 重写其中的drawRect方法 再drawRect方法中利用UIBezierPath添加画图 UIBezierPath的使用方法: (1)创建一个Bez ...

  3. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  4. ubuntu系统下如何修改host

    Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...

  5. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

  6. setCapture、releasCapture 浅析

    1. setCapture 简介 setCapture可以将鼠标事件锁定在指定的元素上,当元素捕获了鼠标事件后,该事件只能作用在当前元素上. 以下情况会导致事件锁定失败: 当窗口失去焦点时,锁定的事件 ...

  7. Lind.DDD.LindMQ~关于持久化到Redis的消息格式

    回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...

  8. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  9. javascript排序

    利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...

  10. iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果

    具体文档和demo可以访问github:https://github.com/zhoushengmufc/iosselect 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的pi ...