微型 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 ...
随机推荐
- GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用
如果,时间长时了,已前做过的东西,都记不得了,所以记录一下. 废话不多说. 1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageCombo ...
- Android开发eclipse运行程序时报timeout的解决方法
eclipse开发Android程序时,忽然莫名其妙报这个错,之前还好好的.忽然就不行了. Failed to install xxx.apk on device~~~: timeout 尝试过手机里 ...
- WP老杨解迷:开发生态两极化和榜单乱象
Windows Phone 自2013年的一片浪潮推动下,2014年终于开始引起了各大小CP们的注意,于是大量的产品开始乘风破浪一路涌进Windows Phone平台,立即改变了榜单的格局,如今,苦B ...
- [iOS翻译]《iOS7 by Tutorials》系列:在Xcode 5里使用单元测试(下)
4.测试失败的调试 是时候追踪之前测试失败的问题了.打开GameBoard.m,找到cellStateAtColumn:andRow: 和 setCellState:forColumn:andRow: ...
- Activiti系列: 如何给内置表单添加字段类型
对于内置的表单,除了原来支持的几种数据类型(string, long, enum, date, boolean, collection)之外,还可以自定义数据类型,比如增加一个javascript数 ...
- tabbar的自定义
[self createCustomTabBar]; -(void)createCustomTabBar{ //创建一个UIImageView,作为底图 UIImageView *bgVi ...
- C#Json序列化和反序列化
1.动态决定数据是否要序列化 我的需求是这样的,我用了一款数据库的组件叫Dos.ORM,确实方便了不少,但是在用的时候,我发现一个问题,比如我定义的表中有一个字段添加时间,修改时间,这些都是默认的,在 ...
- Unity3D独立游戏开发日记(一):动态生成树木
目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...
- jquery的基本动画方法
1 在使用$.extent()的时候,我们一般不放function类型,如果放的话,提前测试下. ?2 Function类型是一种基本类型还是引用类型呢. 3 $('<div>') 指创建 ...
- 第三章:模块加载系统(requirejs)
任何一门语言在大规模应用阶段,必然要经历拆分模块的过程.便于维护与团队协作,与java走的最近的dojo率先引入加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现. ...