微型 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 [email protected]")
                  .Parameter("id", id)
                 .QuerySingle<Product>();

3.返回一个泛型。

List<Product> product = QueryDB().Sql("select * from Product where [email protected]")
                  .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接口下的方法也有支持返回一个动态类型的,所以扩展性也不弱。具体的就在于灵活的运用。

时间: 2024-10-10 10:56:48

微型 ORM-FluentData 温故知新系列的相关文章

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

PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的Poco类,和几乎全部加了特性的Poco类 Insert/Delete/Update/Save and IsNew 等帮助方法. 分页支持:自动得到总行数和数据 支持简单的事务 更好的支持参数替换,包括从对象属性中抓取命名的参数. 很好的性能,剔除了Linq,并通过Dynamic方法快速的为属性赋值

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

说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时间录制,今天我兑现了给朋友们的承诺.. 本次视频教程的目录为 视频.代码.资料,其中视频有4段,资料是我收集的相关资料.. 视频下载地址:http://pan.baidu.com/s/1c05sysC 希望大家多多支持... 郝喜路 2014年6月8日 11:11:02   http://haoxilu.cn

温故知新系列

我从事Windows Phone开发一年多来,终日忙于开发应用,每每有所收获也没有时间思考总结.最近实习即将结束,同时也看清了真实的生活,痛定思痛,决定好好整理自己所学所得,同时也静下心来好好学习一下一直欠缺的知识. 温故而知新,可以为师矣.此番总结,不求为师,但求能看清自己,共勉共勉. 此温故知新系列预计将会有以下几个部分: 1.算法和数据结构篇 2.Windows Phone开发篇 3.Windows开发篇 4.Unity游戏开发篇 5.其他经验随笔 温故知新系列

Weed3 for java 新的微型ORM框架

Weed3,微型ORM框架(支持:java sql,xml sql,annotation sql:存储过程:事务:缓存:监听:等...) 05年时开发了第一代: 08年时开发了第二代,那时候进入互联网公司,对性能有了全新的认识: 14年时开发了第三代.因为不喜欢滥用反射,不喜欢有很多配置,所以一直在执着的没放弃. 前两代,都是在.net开发的:第三代,重点放在了java上.应该算是个功能全面且最小的ORM框架,无其它依赖,仅0.1mb.对外的接口也不多,主要由DbContext上的四个接口发起所

FluentData(微型ORM)

using FluentData; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test { class Program { static void Main(string[] args) { //新增 int count1 = Context().Sql("insert Worker(wN

微型 ORM 的第一篇 DapperLambda发布

引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions  到现在用的FluentData,就说说我自己的使用体验,在这几个相比之下,Dapper应该是最轻量级,而且性能也是最好的,但是相对比较简单了点.EF的最新版也没去使用,所以现在不是很了解,EF在这几个相比一下,功能是最强大的,但是启动加载慢,以及复杂的功能,后续人优化麻烦.FluentData 怎么说呢,用的都挺好用,而且语法

.Net开源微型ORM框架测评

什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”. 一般的ORM包括以下四部分: 一个对持久类对象进行CRUD操作的API: 一个语言或API用来规定与类和类属性相关的查询: 一个规定MAPPING METADATA的工具: 一种技术可以让ORM的实现同事务对象一起进行D

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

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.qdmm.c

微型orm框架--dapper的简单使用

1.安装 首先使用nuget安装dapper,因为这里的示例是使用mysql,所以还要安装mysql的驱动.如下图: 2 数据库表 脚本 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for class -- ---------------------------- DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `id` int(