高仿Entity Framework?Linq to SQL也有春天!

长平狐 发布于 2013/06/17 12:50
阅读 235
收藏 1

开发这个框架,主要起源于有很多使用ALinq或者Linq to SQL的用户,经常向我抱怨,它们使用起来的确很爽,但是动态查询太让人纠结了。这个框架主要就是想解决客户碰到的动态查询的问题。至今为至,已经断断续续地写了一年多了,写这个框架,充满了挑战与乐趣。当然,现在更觉得,能把文档写好,更是挑战。大多数的程序员,一直对于写文档这码事,不大重视,我也是其中的一员。但是,长期地与客户打交道,让我认识到,文档是非常地重要的,而且,能把文档写好也不是件容易的事情。这次的发布,更多的精力放在了文档的编写上。所以,在这次的发布包里,你们会看到一份非常用心写的,非常详细的文档。

正如你们在标道上看到的,ALinq Dynamic 是高仿Entity Framework的,为什么要山寨,而不是另外创造一种语法?

1)不希望加重用户的学习负担,现在的框架已经够多。每多一种语法,就多一份的学习成本。

2)我觉得Entity SQL设计得很好,与SQL极为接近,用户基本上不需要花什么时间就能上手了。SQL谁不会写呢?

所以我认为,为了创新而去创新是件毫无意义的事情,一切必须是服务于用户,不能服务于用户的创新是没有意义的。

当然,除了山寨,ALinq Dynamic也进行了一系列的微创新,但目的只有一个,服务用户,给用户带来更多的便利。这些微创新,在后面会提到。

 

ALinq Dynamic V1.5 这个版本,做了重大的更新,修正了大量的BUG,已经实现了Entity SQL 95% 的功能(不支持的,都是极个别用不到的方法),同时提供的长达40多页的完整文档,它是一个里程碑版本,各位乡亲父老们,绝对不容错过。

下载地址: http://esql.codeplex.com/

授权

ALinq Dynamic 是开源,并且使用 MIT 授权协议的。这是一个非常宽松的授权,你知道的。我也不介意大家能够在此基础上,开发出更为优秀、卓越的框架,无论是免费的或者商业的。真心期待国内能够涌现出更多高水准的作品。

简介

ALinq Dynamic 为ALinq以及Linq to SQL提供了一个Entiy SQL的查询接口,使得它们能够应用Entity SQL 进行数据的查询。它的原理是将Entiy SQL解释为Linq表达式,再执行生成的Linq表达式。

亮点

ALinq Dynamic 除了高仿 Entity Framework,还有着许多亮点。

1、与Linq Exssion无缝对接。与Linq Exssion的无缝对接,使得在编写esql语句时,具有高度的灵活性。可以很好地结合静态查询与动态查询的优点

示例一

使用参数化数据源。你可以使用一个Linq的查询,作为一个参数传入到esql语句中。

var employees = db.Employees.Where(o => o.Country == " EN " ); var esql = " select e from @0 as e where e.LastName != 'Mak' " ; var q = db.CreateQuery(esql, employees);

示例二

支持利用索引器进行查询,为弱类型的查询带来了极大的方便。

var esql = @" select e.FirstName, e.LastName from Employees as e " ; var q = db.CreateQuery<IDataRecord> (esql) .Where(o=> ( string)o[ " FirstName "] != " Mike ");

2、支持基于接口的查询

基本于对接口查询的支持,在使用时,具有以下几个好处

1)为代码封接提供了极大的使用,例如你可以实体类,抽象出一个最为基本的接口,然后提供一些常用的调用方法。

2)可以动态生成实体类,而不必在编译期就生成。例如你可以在运行时生成实体类,这样做的好处是,当你需要向表添加字段时,不需重新生成实体。而新增的字段,可以通过索引器来使用。

3)使得基于AOP的注入的应用成为了可能。

示例

下面的示例是基于接口的查询示例,值得注意的是,Employee实体类继承了IEmployee接口。

var esql = " select e from Employees as e " ; var q = db.CreateQuery<IEmployee> (esql) .Where(o => o.FirstName == " F " && o.LastName == " L " ) .Select(o => new { o.FirstName, o.LastName, o.BirthDate });

使用

1、对于 ALinq 用户,引用 ALinq.Dynamic,于对于Linq to SQL用户,则引用System.Linq.Dynamic。这两个程序集,可以在下载的压缩包中的binary文件夹中找到。

2、在代码中,导入ALinq.Dynamic的命名空间。

下面是一个完整的示例。

using System; using NorthwindDemo; using ALinq.Dynamic; namespace ConsoleApplication1{ class Program { static void Main( string [] args) { var db = new NorthwindDataContext( @" D:\esql\source\db\Northwind.db3 " ); var esql = " select p from Product as p " ; var q = db.CreateQuery<Product> (esql); foreach ( var item in q) Console.WriteLine(item.ProductName); } }}

关于ALinq的版本

ALinq Dynamic使用的是ALinq最新的免费版,如果你使用的是其它版本,需要在App.config中设置,或者重新编译代码。请参数下面的例子:

< assemblyBinding xmlns ="urn:schemas-microsoft-com:asm.v1" > < dependentAssembly > < assemblyIdentity name ="System.Data.SQLite" publicKeyToken ="db937bc2d44ff139" culture ="neutral" /> < bindingRedirect oldVersion ="1.0.0.0-1.0.66.0" newVersion ="1.0.61.0" /> </ dependentAssembly > </ assemblyBinding >

 

 

 


原文链接:http://www.cnblogs.com/ansiboy/archive/2013/03/05/2944856.html
加载中
返回顶部
顶部