这份工作一直以来都用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数据库的链接字符串,各位自己去百度,这里就不多说了
运行预览,生成的数据表如下