2015年8月3日星期一

高性能ORM框架XLinq功能详细介绍 - 馨辰

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
高性能ORM框架XLinq功能详细介绍 - 馨辰  阅读原文»

之前简单介绍了XLinq的一些功能,有很多功能都没有提到,现在给XLinq加了一些功能,这次把所有功能都介绍一遍。

设计目标

  1. 易用性

    在使用一个框架的时候

    应该没几个人会喜欢写一大堆的配置文件吧

    也应该没几个人会喜欢为了完成一个小功能却需要写一大堆代码

    这是XLinq开发的首要目标之一,就是尽可能提高易用性

    最小配置的情况下仅需要一句连接字符串的配置就可以使用

    默认支持的是Sql Server 2008 R2数据库,理论上说也大部分支持了sql server系的其他数据库

  2. 高性能

    目前针对查询时的DataReader转List和批量插入有针对性优化,其他的不太重要的例如批量更新这个并没有太多优化

  3. 易于调试

    出了问题能够以最快速度让使用者定位到问题,其实这些是细节问题

  4. 支持LINQ

    这个其实是跟易用性挂勾的,园子里面有大神写的ORM,声称"无Linq",其实我也不太想用Linq,因为解析Linq实在太难,坑太多,但又找不到另一种比Linq更让我满意的方案。然后我去看了他的ORM的使用方法,发现一旦复杂起来不见得会比Linq更清晰,并且实体类的设计实在是···

    Linq实现复杂的语法确实比较蛋疼,sql语句里面直接来几个case when,linq就得写晕过去,至少解析的时候会晕过去。

    但在我看来,既然linq语句都比较复杂了,那肯定是有很多的逻辑在里面,就像上面说的case when,那么为什么不把这些逻辑分拆成好几个linq去执行呢?或者干脆点写存储过程里面。

  5. 多数据库支持

使用方法

  1. 建立控制台应用程序,暂时只支持.net 4.5.2版本
  2. 安装xlinq nuget包

  3. 建立数据库XLinq及相关表

  4. 添加配置文件
    1. <connectionStrings>
    2. <add name="test" connectionString="Data Source=(local);;initial catalog=XLinq;User Id=xinchen;Password=123456"/>
    3. </connectionStrings>
  5. 建立TestDataContext类和User实体类
    1. public class TestDataContext:DataContext
    2. {
    3. public TestDataContext():base("test")
    4. {
    5. }
    6. }
    7. public class User
    8. {
    9. public int Id { get; set; }
    10. public string Username { get; set; }
    11. }
  6. 开始使用
    1. TestDataContext db = new TestDataContext();
    2. db.Set<User>().ToList();

查询

  1. 单表查询

    Lambda版:

    1. db.Set<User>().Where(x => x.Username == "xxxx").ToList();

    LINQ版:

    1. (from user in db.Set<User>() where user.Username == "xxxx" select user).ToList();

    LINQ版看起来明显感觉比较麻烦,所以在简单查询的时候我更倾向于Lambda表达式

    上面的语句生成的代码是一致的

    1. .
    2. ,.
    3. FROM WHERE (. = @param2)
  2. 多表查询

    建立实体类的过程不再说

    两个表连接查询,因为用Lambda实现比较复杂,所以后面都不再用Lambda实现

    1. var query = from user in db.Set<User>()
    2. join userRole in db.Set<UserRole>() on user.Id equals userRole.UserId
    3. where user.Id == 1 && userRole.RoleId == 1
    4. select new
    5. {
    6. user.Id,
    7. userRole.RoleId,
    8. user.Username
    9. };

    生成的语句

    1. [user].
    2. ,.[RoleId] [RoleId]
    3. ,[user].
    4. ON [user]. = .
    5. WHERE (([文章目录 - 静逸  阅读原文»

      chrome

      利用chorme调试手机网页

      Chrome控制台 JS调试的一些小技巧

      chrome使用技巧(看了定不让你失望)

      我所了解的chrome

      你可能不知道console强大

      CSS3精典

      css3新增属性API

      CSS收集的常用代码(与打印相关)

      CSS3动画(性能篇)

      css编写规范

      CSS读书笔记系列

      看《css知多少》的一些总结

      你所不了解的float(滥用float的怪异现象)

      CSS3系列四(Media Queries移动设备样式)

      CSS3系列一(概述、选择器、使用选择器插入内容)

      说说css3布局

      CSS--字体

      CSS--结构和层叠

      CSS--值和单位

      CSS--选择器

      CSS3实践

      自制的类似EasyUI的JQuery Button插件

      利用css3选择器及css3边框做出的特效(1)

      整理CSS引发的相关理论的梳理

      用css3实现各种图标效果(1)

      css3实现手机效果的“切换标签”

      HTML5精典

      HTML5 history

      我所了解的meta

      移动端遇到的问题

      Html5读书笔记系列

      HTML5系列四(特征检测、Modernizr.js的相关介绍)

      HTML5系列四(WebWorker、地理定位)

      HTML5系列三(多媒体播放、本地存储、本地数据库、离线应用)

      HTML5系列二(标签元素、FileReader、拖放)

      HTML5系列一(属性概述)

      HTML5系列五(Canvas详述)

      JavaScript读书笔记

      高性能JavaScript笔记三(编程实践)

      高性能JavaScript笔记二(算法和流程控制、快速响应用户界面、Ajax)

      高性能JavaScript笔记一(加载和执行、数据访问、DOM编程)

      javascript表单验证

      零散的JavaScript公用方法

      DOM参考手册及事件参考手册

      Ajax 简述

      精通javascript(看书笔记)

      JavaScript中this的一些怪异现象

      用面对对象方式定tab标签

      web前端开发修炼之道--编写高质量代码

      global--命名空间的使用(一些零散的js方法)

      公共事件处理函数js库

      JavaScript精典

      总结的JS数据类型判定(非常全面)

      JS方法集

      JS中的"=="转换规则

      我所了解的JavaScript糟粕和鸡肋

      初识JSLint及建议JS编码风格

      看了汤姆大叔的“你真懂JavaScript吗?”的一些感慨

      对JavaScript优化及规范的一些感想

      JS生成随机数的各种函数

      LABjs(类似于LazyLoad,但它更加方便管理依赖关系)

      JS性能方面--内存管理及ECMAScript5 Object的新属性方法

      js常用函数、书写可读性的js、js变量声明...

      高性能JavaScript(您值得一看)

      总结jQuery选择器

      JavaScript杂谈(顺便也当知识积累)

      我总结的js性能优化的小知识

      我总结的js方面你可能不是特别清楚的小知识

      javascript 未来新方法的介绍

      Web Worker

      区别 Jquery对象和Dom对象

      收集的一些jQuery (我平常用的少的,但确实挺有效果的)

      ECMAScript严格模式简介

      js实现身份证号码验证

      javascript变量、作用域和内存问题......

      javascript 代码可读性

      你真的已经搞懂JavaScript了吗?

      js中常常容易忘记的基本概念

      JavaScript实践

      ECMAScript严格模式简介

      js实现身份证号码验证

      javascript变量、作用域和内存问题......

      javascript 代码可读性

      你真的已经搞懂JavaScript了吗?

      js中常常容易忘记的基本概念

      Navigation&Resource

      ECMAScript严格模式简介

      js实现身份证号码验证

      javascript变量、作用域和内存问题......

      javascript 代码可读性

      你真的已经搞懂JavaScript了吗?

      js中常常容易忘记的基本概念

      Other

      Node实践之二

      阅读更多内容

没有评论:

发表评论