微型 ORM-FluentData 温故知新系列
http://www.cnblogs.com/_popc/archive/2012/12/26/2834726.html
引言:FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用。FluentData 于(2012-02月)推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。
楼主在今年二月份看到博客园新闻中的推荐(http://news.cnblogs.com/n/132803/),然后在项目组的开发中接触到了这个ORM。 比起Entity Framework 和 NHibernate,都过于复杂而且难于学习.FluentData就简单的多了。不过楼主当时也是刚开始了解ORM和MVC,所以并没有接触过Entity Framework 和 NHibernate.不过对于小型站点而言,这个ORM是力荐大家了解下的.该ORM允许开发人员拥有对 SQL 较多的控制,而不是依赖 ORM 进行自动生成。它不仅可以使用 SQL 来执行查询、增添和更新操作,还可以支持使用存储过程和事务。根据文档描述,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.当然我喜欢写我牛逼的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,int pageIndex, 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>();
total = store.ParameterValue<int>("totalPage");
return result;
}

上面贴的都是一些方法内容,具体的可以用方法封装下,当然该ORM是基于Freamework4.0的,Idbcontext接口下的方法也有支持返回一个动态类型的,所以扩展性也不弱。具体的就在于灵活的运用。
微型 ORM-FluentData 温故知新系列的更多相关文章
- 微型orm fluentdata
http://fluentdata.codeplex.com/documentation#Query
- orm fluentdata使用相关文章
微型orm fluentdata使用:http://www.360doc.com/content/12/1228/23/9200790_256885743.shtml
- FluentData微型ORM
最近在帮朋友做一个简单管理系统,因为笔者够懒,但是使用过的NHibernate用来做这中项目又太不实际了,索性百度了微型ORM,FluentData是第一个跳入我眼睛的词.简单的了解下FluentDa ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
- 【译】微型ORM:PetaPoco【不完整的翻译】
PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...
- 【译】微型ORM:PetaPoco
PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...
- 【译】微型ORM:PetaPoco【不完整的翻译】(转)
出处:http://www.cnblogs.com/youring2/archive/2012/06/04/2532130.html PetaPoco是一款适用于.Net 和Mono的微小.快速.单文 ...
- 微型ORM:PetaPoco 学习资料整理
github地址:https://github.com/CollaboratingPlatypus/PetaPoco petapoco 实体中字段去掉关联(类似于EF中的NotMap) 微型ORM:P ...
随机推荐
- typicalapp.js
/** * 1.找出数字数组中最大的元素(使用Math.max函数) 2.转化一个数字数组为function数组(每个function都弹出相应的数字) 3.给object数组进行排序(排序条件是每个 ...
- Windows客户端C/C++编程规范“建议”——风格
本文来自:http://blog.csdn.net/breaksoftware/article/details/37935459 命名风格也非常适用于C# 9 风格 9.1 优先使用匈牙利命名法 等级 ...
- Sublime 将 Tab 转为空格
最近在使用 vue-cli 搭建项目,但每次用 Hbuilder 编写 vue 文件的时候,如果存在<script>部分就会报错,错误信息大意是说空格有问题.仔细研究了之后才知道,这是因为 ...
- PHP基础14:表单处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 北京联想招聘-Android Framework高级工程师(7-10年) 加入qq 群:220486180 或者直接在此 留言咨询
Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Resear ...
- GDB深入研究——20135308芦畅
GDB深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存到文件 gdb-sample.c 中,用GCC编译之 #include <stdio.h> ...
- Jenkins进阶系列之——14配置Jenkins用户和权限
今天给大家说说使用Jenkins专有用户数据库的配置,和一些常用的权限配置. 配置用户注册 在已运行的Jenkins主页中,点击左侧的系统管理—>Configure Global Securit ...
- python实现简易数据库之二——单表查询和top N实现
上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...
- #Linux学习笔记# Linux在线帮助文档man page
man是manual的简称,表示手册页.Linux系统的帮助手册页是按照章节(SECTION)来存储了.man手册页分为下面几个章节. 1 普通命令 2 内核提供的系统调用 3 库调用(C库函数) 4 ...
- Unity 3D本地发布WebPlayer版时Failed to download data file解决方案
遇到这个问题就是指Web服务器并没有支持这种*.unity3d文件类型.需要做的是在Web服务器中添加MIME类型: IIS 7 及以上版本: 在功能视图的IIS选项卡中: 双击打开MIME,选择添加 ...