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


開發這個框架,主要起源於有很多使用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 Expression無縫對接。與Linq Expression的無縫對接,使得在編寫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>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM