FluentData:一种使用Fluent API的新型轻量级ORM模型 
  FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用。FluentData 于本月推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。

  FluentData 的设计者 Lars-Erik Kindblad 谈到: 
 
  当前市面上的 ORM 框架,如 Entity Framework 和 NHibernate,都过于复杂而且难于学习。此外,由于这些框架自身抽象的查询语言以及从数据库到 .NET 对象的映射太过麻烦,导致它们生成的 SQL 都很低效。 
 
  FluentData 另辟蹊径,它是一个轻量级框架,拥有简单的 fluent API 并且很容易学会。 
 
  与其他微型 ORM(如 Dapper 和 Massive)类似,FluentData 关注性能和易用性。它允许开发人员拥有对 SQL 较多的控制,而不是依赖 ORM 进行自动生成。它不仅可以使用 SQL 来执行查询、增添和更新操作,还可以支持使用存储过程和事务。根据文档描述,FluentData 可以在不改动已有结构的情况下,与任何业务对象一同工作。 
 
  以下是 FluentData 的一些其他特性: 
 
  · 多结果集(Multiple Result Set):在一次数据库操作下返回多个数据集; 
  · 开发人员可使用强类型对象或动态对象; 
  · 可为创建时需要特殊处理的复杂对象自定义实体工厂(Custom Entity Factory); 
  · 具有添加其他数据库支持的能力。

  FluentData 需要 .NET 4.0,并支持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驱动的 Oracle 和 MySQL。 想要了解进一步信息,如代码示例和免费下载,请访问CodePlex 站点上的 FluentData。(http://fluentdata.codeplex.com/)

 快速上手如何使用FluentData

下面我将一一举例向大家介绍FluentData在开发过程中的运用.

一:下载该项目并且引用FluentData.dll,或者直接在解决方案中添加该开源项目.项目地址:http://fluentdata.codeplex.com/

二.dll引用入到我们的数据业务层. 
  1.)创建并且初始化一个IDbContext. 
它是我们与数据库操作中的上下文,所有的有关数据操作都调用它下面的方法。初始化它的连接字符串web.config

public static IDbContext QueryDB()
{
return new DbContext().ConnectionStringName(\"testDBContext\", DbProviderTypes.SqlServer);
}

  2.)config中的连接字符串实例

<connectionStrings>
<add name=\"testDBContext\"connectionString=\"server=192.168.1.100;uid=sa;pwd=sa!;database=testDB;\" />
</connectionStrings>

  

 

那么下面就可以在我们的数据业务层中根据自己的需求随心所欲的写sql了。

1.需要返回一个实体:

Product product = QueryDB().Sql(@\"select * from Product where ProductId = 1\").QuerySingle<Product>()

2.根据参数返回一个实体?别急,尝尝那飘渺的链式操作吧

Product product = QueryDB().Sql(\"select * from Product where id=@id\")

                  .Parameter(\"id\", id)

                 .QuerySingle<Product>()

  

 

3.返回一个泛型。

List<Product> product = QueryDB().Sql(\"select * from Product where id=@id\")
.Parameter(\"id\", id)
.Query<Product>()

  

 

4.多表支持(这个楼主实际工作中倒是没有用到过)

using (var command = QueryDB().MultiResultSql())
{
List<Category> categories = command.Sql(
@\"select * from Category;
select * from Product;\").Query<Category>();
List<Product> products = command.Query<Product>();
}
 

5.插入操作

var productId = QueryDB().Insert(\"Product\")
.Column(\"Name\", \"The Warren Buffet Way\")
.Column(\"CategoryId\", 1)
.ExecuteReturnLastId()

6.当然我喜欢写我牛B的sql。

var productId = QueryDB().Sql(@\"insert into Product(Name, CategoryId)
values(\‘The Warren Buffet Way\‘, 1);\").ExecuteReturnLastId()
 

7.修改操作.

QueryDB().Update(\"Product\")
.Column(\"Name\", \"The Warren Buffet Way\")
.Column(\"CategoryId\", 1)
.Where(\"ProductId\", 1)
.Execute()

  同上,也可以不用update()方法,而直接写sql.

8.删除操作 
  

QueryDB().Delete("Product").Where("ProductId", 1).Execute(); 

9.我想链式操作,我想写lambda表达式OK。

QueryDB().Delete<Product>(\"Product\")
.Where(x=>x.id,id)
.Execute()

 

 

10.事物的处理

using (var context = QueryDB().UseTransaction)
{
context.Sql(\"update Product set Name = @0 where ProductId = @1\")
.Parameters(\"The Warren Buffet Way\", 1)
.Execute();
context.Sql(\"update Product set Name = @0 where ProductId = @1\")
.Parameters(\"Bill Gates Bio\", 2)
.Execute();
context.Commit();
}

 

在事物的操作中记得context.Commit();方法的执行,楼主曾经在自己的一个项目中需要用到事物,却忘记了执行提交这个方法,最后在源码的汪 洋中探索许久 
11.存储过程 
有关存储过程的使用,楼主在实际项目开发中,用上了存储过程。该存储过程的作用是分页,那么这里也贴出来分享一下

public static List<T> getPage<T>(string tableName,string tableFields, string sqlWhere,string order,intpageIndex, int pageSize, out int total)
{
var store = QueryDB().StoredProcedure(\"PF_Sys_PageControl\")
.ParameterOut(\"totalPage\", DataTypes.Int16)
.Parameter(\"tableName\", tableName)
.Parameter(\"tableFields\", tableFields)
.Parameter(\"sqlWhere\", sqlWhere)
.Parameter(\"orderFields\", order)
.Parameter(\"pageSize\", pageSize)
.Parameter(\"pageIndex\", pageIndex);
var result=store.Query<T>()
}

  

FluentData,一个轻量级开源的.NET ORM数据持久化框架的更多相关文章

  1. 一个类GraphQL的ORM数据访问框架发布

    Zongsoft.Data 发布公告 很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后,今天正式宣布对外推广! 这是一个类 GraphQL 风格的  ...

  2. 几种.NET平台数据持久化框架介绍

    原文连接:http://yuxnet.blog.163.com/blog/static/164863495201131532223362/ 在.NET平台下,关于数据持久层框架非常多,本文主要对如下几 ...

  3. MVC之实体框架(数据持久化框架)EntityFrameWork(EF)

    EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...

  4. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  5. Java EE数据持久化框架笔记 • 【目录】

    章节 内容 实践练习 Java EE数据持久化框架作业目录(作业笔记) 第1章 Java EE数据持久化框架笔记 • [第1章 MyBatis入门] 第2章 Java EE数据持久化框架笔记 • [第 ...

  6. 分享自己的超轻量级高性能ORM数据访问框架Deft

    Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...

  7. 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈

    解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data  和 mysql 写一个 wcf 的 接口呢. ...

  8. Java EE数据持久化框架 • 【第1章 MyBatis入门】

    全部章节   >>>> 本章目录 1.1 初识MyBatis 1.1.1 持久化技术介绍 1.1.2 MyBatis简介 1.1.2 Mybatis优点 1.1.3 利用Mav ...

  9. Java EE数据持久化框架 • 【第5章 MyBatis代码生成器和缓存配置】

    全部章节   >>>> 本章目录 5.1 配置MyBatis Generator 5.1.1 MyBatis Generator介绍 5.1.2 MyBatis Generat ...

随机推荐

  1. HBase存储架构

    以下的介绍是基于Apache Hbase 0.94版本: 从HBase的架构图上可以看出,HBase中的存储包括HMaster.HRegionServer.HRegion.Store.MemStore ...

  2. C++实现不能继承的类

    实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承. C++中没有类似的关键字,须自己实现.一般有如下两种方法: 1.设置构造方法与析构方法为私有 class ...

  3. docker——三大核心概念

    镜像.容器.仓库是docker的三大核心概念. docker镜像类似于虚拟机镜像,你可以将其理解为一个只读模板. docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用.容器是从 ...

  4. 为什么mysql innodb索引是B+树数据结构

    1.文件很大,不可能全部存储在内存中,所以要存在磁盘上 2.索引的组织结构要尽量减少查找过程中磁盘I/O的存取次数(为什么用B-/+Tree,还跟磁盘存取原理有关) 3.B+树所有的data域在叶子节 ...

  5. CCF 字符串匹配(find()函数的使用)

    问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你 ...

  6. 2016-2017 National Taiwan University World Final Team Selection Contest J - Zero Game

    题目: You are given one string S consisting of only '0' and '1'. You are bored, so you start to play w ...

  7. hadoop 一些命令

    关闭访问墙  service iptables stop hadoop dfs -mkdir input hadoop dfs -copyFromLocal conf/* input hadoop j ...

  8. 十八般武艺之 Runloop

    嗯,runloop ,看过,用过.但是有时候突然被问到,总是不能很好的描述给他人,也许是程序员本来口拙的缘故吧.另外,也是对runloop还是理解的不够透彻. 于是乎,决定重新整理一下,加深一下印象. ...

  9. iOS 截屏,openGL ES 截图,以及像素颜色判断

    代码整理了2种截图,类似.(没苹果自带那种截图彻底) 方法一: +(UIImage *)fullScreenshots{ UIWindow *screenWindow = [[UIApplicatio ...

  10. Dbus组成和原理

    DBUS是实质上一个适用于桌面应用的进程间的通讯机制,即所谓的IPC机制.适合在同一台机器,不适合于INTERNET的IPC机制.DBUS不是一个为所有可能的应用的通用的IPC机制,不支持其他IPC机 ...