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 温故知新系列的更多相关文章

  1. 微型orm fluentdata

    http://fluentdata.codeplex.com/documentation#Query

  2. orm fluentdata使用相关文章

    微型orm fluentdata使用:http://www.360doc.com/content/12/1228/23/9200790_256885743.shtml

  3. FluentData微型ORM

    最近在帮朋友做一个简单管理系统,因为笔者够懒,但是使用过的NHibernate用来做这中项目又太不实际了,索性百度了微型ORM,FluentData是第一个跳入我眼睛的词.简单的了解下FluentDa ...

  4. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  5. 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  6. 【译】微型ORM:PetaPoco【不完整的翻译】

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...

  7. 【译】微型ORM:PetaPoco

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...

  8. 【译】微型ORM:PetaPoco【不完整的翻译】(转)

    出处:http://www.cnblogs.com/youring2/archive/2012/06/04/2532130.html PetaPoco是一款适用于.Net 和Mono的微小.快速.单文 ...

  9. 微型ORM:PetaPoco 学习资料整理

    github地址:https://github.com/CollaboratingPlatypus/PetaPoco petapoco 实体中字段去掉关联(类似于EF中的NotMap) 微型ORM:P ...

随机推荐

  1. 25Spring_事务管理的两种机制

    一共有两种事务管理机制:编程式事务管理和声明式事务管理. 1.编程式事务管理企业已经不用了. 2.我们主要讲的是声明式事务管理.声明式事务管理 ,无需要修改原来代码,只需要配置,为目标代码添加事务管理 ...

  2. OV7725学习(二)

    首先要配置OV7725摄像头的寄存器,遵循的是SCCB协议,配置之前需要1ms的时间等待,保证系统稳定,而且刚开始要丢弃前10帧的数据,因为认为前10帧的数据是不稳定的,图1就是数据手册上关于这一点的 ...

  3. JS原生父子页面操作

    var api = frameElement.api;  //当前 W = api.opener;//父页面 W.setPerSel(jsonStr); api.close(); //关闭窗口 js操 ...

  4. PHP基础17:日期

    <?php //1.PHP Date()函数,PHP Date() 函数把时间戳格式化为更易读的日期和时间. // 获得简单的日期 echo "今天是".date(" ...

  5. php基础06:运算符

    <?php //1.PHP 字符串运算符: 串接 $str1 = "gao"; $str1 = $str1."xiong"; echo $str1; ec ...

  6. Android开发探秘之一:创建可以点击的Button

    感觉到自己有必要学习下手机开发方面的知识,不论是为了以后的工作需求还是目前的公司项目. 当然,任何新东西的开始,必然伴随着第一个HelloWorld,Android学习也不例外.既然才开始,我就不做过 ...

  7. 广州传智博客黑马训练营.Net15期

    广州传智博客黑马训练营.Net15期 7 张扬波 MVC大项目 6 张扬波 MVC 3 胡凌浩 HTML&JS 2 基础加强+三层 5 张扬波 企业站点(asp.net)&EF 4 江 ...

  8. [CareerCup] 11.6 Search a 2D Matrix 搜索一个二维矩阵

    11.6 Given an M x N matrix in which each row and each column is sorted in ascending order, write a m ...

  9. 20145215《Java程序设计》第8周学习总结

    20145215<Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以设定缓冲区(Bu ...

  10. Orchard 刨析:Logging

    最近事情比较多,有预研的,有目前正在研发的,都是很需要时间的工作,所以导致这周只写了两篇Orchard系列的文章,这边不能保证后期会很频繁的更新该系列,但我会写完这整个系列,包括后面会把正在研发的东西 ...