Elinq+Oracle

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

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

就尝试用用。

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

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

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

 1 using System;
 2 namespace GeoCms.Models
 3 {
 4     public class ArticleContent
 5     {
 6         public int ID { get; set; }
 7         public string Title { get; set; }
 8         public string Image { get; set; }
 9         public string Summary { get; set; }
10         public string Content { get; set; }
11         public DateTime PubTime { get; set; }
12         public int ViewCount { get; set; }
13         public int CateID { get; set; }
14 
15         public ArticleCategory Category { get; set; }        
16     }
17 }

 

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

 1 using System.Collections.Generic;
 2 
 3 namespace GeoCms.Models
 4 {
 5     public class ArticleCategory
 6     {
 7         public int ID { get; set; }
 8         public string Name { get; set; }
 9         public int ParentID { get; set; }
10 
11         public IList<ArticleContent> Contents { get; set; }
12 
13     }
14 }

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

ArticleContent跟ArticleCategory是一对多的关系

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

 1 using System;
 2 using NLite.Data;
 3 
 4 namespace GeoCms.Models
 5 {
 6     public class CmsDbContext:DbContext
 7     {
 8 
 9         const string connectionstring = "OracleConenction";
10         static NLite.Data.DbConfiguration dbConfig = NLite.Data.DbConfiguration
11             .Configure(connectionstring)
12             .SetSqlLogger(() => new SqlLog(Console.Out))
13             .AddClass<Models.ArticleCategory>(m=> {
14                 //自动增长
15                 m.Id(c => c.ID).DbGenerated();
16                 //这里很重要,设置自动增长列的序列,在创建table时候会自动创建序列
17                 m.SequenceId(c => c.ID).SequenceName("SEQU_ArticleCategory");
18                 //一对多(一个分类对应多个文章)
19                 m.OneToMany<Models.ArticleContent>(c => c.Contents).ThisKey(c => c.ID).OtherKey(c => c.CateID);
20             })
21             .AddClass<Models.ArticleContent>(m=>{
22                 //自动增长
23                 m.Id(e => e.ID).DbGenerated();
24                 //设置并创建序列
25                 m.SequenceId(e => e.ID).SequenceName("SEQU_Articles");
26                 //设置一对一(一个文章对应一个分类)
27                 m.OneToOne<Models.ArticleCategory>(a => a.Category).ThisKey(a => a.CateID).OtherKey(c => c.ID);
28             });
29 
30 
31 
32         public CmsDbContext():base(dbConfig)
33         {
34 
35         }
36 
37         public readonly IDbSet<Models.ArticleCategory> ArticleCategory;
38         public readonly IDbSet<Models.ArticleContent> Article;
39 
40 
41     }
42 }


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

1 Models.CmsDbContext db = new Models.CmsDbContext();
2             if (db.DbHelper.DbConfiguration.DatabaseExists())
3             {
4                 db.DbHelper.DbConfiguration.CreateTables();
5             }


 

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

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

Elinq+Oracle,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。