前言:
自从发布年度开源力作-国产ORM框架ELinq诞生了 这篇博文后,得到了很多园友的支持,另外ELinq群:271342583群的群友也非常活跃,大家一起为该框架起了一个响亮的名字:ELinq(之前为NLite.Data),另外一些网友建议的新特性,比如支持类似EF框架的DbContext,可以直接继承DbContext,而不需要手工实现Dispose,可以直接定义DbSet类型的成员属性,而不需要手工对其赋值,增加在调试时可以直接方便的看到Sql内容,而不是通过日志,可以方便的查看SQL的参数等等,为了快速的回馈广大网页的支持特发布该版本表示感谢!
更新日志:
ELinq 0.4 2012/12/8 发布:
1. 组件名称由NLite.Data 改为ELinq,命名空间没变,保持良好的向下兼容性 2. 开放DbContext 类,使其允许被直接继承,简化ELinq使用DbContext的复杂度 3. 开放DbSet 的SqlText和ExecutePlan 属性接口,方便DbSet在运行时方便的调试,可以直接查看SQL和执行计划
NLite.Data 2012-12-3 RC2 发布
1. 修复通过HashTable进行删除的Bug 2. 支持通过connectionString 和providerName 作为参数来配置 3. 使MySQL 支持无符号类型 4. 在TableAttribute中添加Schema 属性 5. 添加基于版本号机制的并发冲突检查机制 6. 移除在DbHelper中对Position参数支持机制,并重构和简化DbHelper,使DbHelper仅仅支持命名参数 7. 添加Fluent映射Api 8. 重构表达式ExpresionBuilder,使其可以自定义扩展 9. 使Oracle 支持自定义序列功能
NLite.Data 2012-11-16 RC1 发布
1. 重构EntityModel 和MemberModel 2. 优化系统性能 3. 完善并详细测试SQLServer、Oracle、MySql,SQLite、SqlCE、Access的基本数据类型的相互转换函数 4. 添加公共接口的代码注释 5. 简化并增强增删改操作功能
Demo (以 国内开源ELinq ORM 框架-首航之旅 这篇文章的例子为原型)
1. 在Nuget控制台中输入:install-package ELinq
2. 在配置文件中添加连接字符串配置信息
<connectionStrings> <clear/> <add providerName ="System.Data.OleDb" name="Northwind" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Northwind.mdb;Persist Security Info=True"/> </connectionStrings>
3. 实体类
public class Customer { public string CustomerID; public string ContactName; public string CompanyName; public string Phone; public string City; public string Country; }
4. 建立OR映射关系,经过观察发现实体的字段和表Customers的列以及主键都符合ELinq的约定规则,故不需要手工映射即可,只有实体类名Customer和表名Customers不一致,需要手动建立映射,具体的方法有 a. 基于标签的方式:TableAttribute; b. 基于命名策略的方式 c. 基于FluentMapping 的方式,在这里只介绍基于标签的方式
[Table(Name = "Customers")] public class Customer { public string CustomerID; public string ContactName; public string CompanyName; public string Phone; public string City; public string Country; }
5. 创建DbConfiguration并注册OR映射关系
static DbConfiguration dbConfiguration = DbConfiguration .Configure("Northwind") .AddClass<Customer>() .SetSqlLogger(()=>new SqlLog(Console.Out));
6. 创建DbContext Class(该DbContex 的使用方式是该版本刚刚添加的,之前的使用方式仍然保持不变)
public class NorthwindContext : DbContext { static DbConfiguration dbConfiguration = DbConfiguration .Configure("Northwind") .AddClass<Customer>() .SetSqlLogger(()=>new SqlLog(Console.Out)); public NorthwindContext() : base(dbConfiguration) { } //这里并没有对Custmers 只读字段进行赋值操作,系统会自动进行 public readonly IDbSet<Customer> Custmers; }
7. 简单的Access分页测试代码如下:(注意由于受到Access数据库本省的限制,Access的分页必须包含排序字段,另外Skip谓词必须在Take的前面)
using (var ctx = new NorthwindContext()) { var customers = ctx.Custmers; var q = customers.OrderBy(p => p.City).Skip(10).Take(10); var list = q.ToList(); foreach (var m in list) Console.WriteLine(m.CustomerID); } }
8. ELinq提供了非常丰富的API,方便程序的追踪和调试,下面是部分截图
图1:NorthwindContext 类中的Customers字段可是只读的并且从来没有赋值,下面可以看出Customers的字段已经有值了!
图2 :非常方便的在调试时查看SQL语句
图3:可以清晰的看到Linq表达式经过翻译后的整个执行计划(SQL语句,SQL参数,DataReader到实体类间的映射过程)
图4:可以清晰的查看OR映射的元数据信息
技术支持:
谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^