zoukankan      html  css  js  c++  java
  • 高仿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>

     

     

  • 相关阅读:
    UnityVS(Visual Studio Tools For Unity)的安装与使用
    Balsamiq Mockups注册码
    python基础之os.system函数
    jenkins配置记录(1)--添加用户权限
    chromedriver与chrome各版本及下载地址
    高阶面试官应掌握哪些面试技巧
    [面试技巧]16个经典面试问题回答思路
    自动代码质量分析(GitLab+JenKins+SonarQube)
    Git提交代码自动触发JenKins构建项目
    Allure 安装及使用
  • 原文地址:https://www.cnblogs.com/ansiboy/p/2944856.html
Copyright © 2011-2022 走看看