微型 ORM-FluentData
来源:互联网 发布:网络兼职文案 编辑:程序博客网 时间:2024/04/29 02:08
引言:FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用。FluentData 于(2012-02月)推出,它使用fluent API 并支持 SQL Server、SQLAzure、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接口下的方法也有支持返回一个动态类型的,所以扩展性也不弱。具体的就在于灵活的运用。大伙有时间有机会的话,也去尝试下吧
出处:http://www.cnblogs.com/_popc/archive/2012/12/26/2834726.html
类似文章:http://blog.itpub.net/29511780/viewspace-1194048/
链接:http://pan.baidu.com/s/1eQkV4VC
密码在原文,即下面链接中。
类似文章链接引之《FluentData -轻量级.NET ORM持久化技术解决方案》全文请查看:http://bbs.ibeifeng.com/read-htm-tid-66379.html
- 微型 ORM-FluentData
- 微型 ORM-FluentData
- 微型 ORM-FluentData 温故知新系列
- 微型 ORM-FluentData 实例详解
- 新型轻量级ORM FluentData的使用
- 【译】微型ORM:PetaPoco
- 微型ORM:MiniPoco
- PetaPoco微型ORM
- FluentData
- FluentData
- FluentData - 轻量级.NET ORM持久化技术解决方案
- FluentData - 轻量级.NET ORM持久化技术解决方案
- FluentData 轻量级.NET ORM持久化技术详解
- .Net开源微型ORM框架测评
- .Net开源微型ORM框架专业测评
- FluentData介绍
- 微型ORM——用VB和C#编写的动态类型ORM
- SuperHelper——灵活通用的、开源的.Net ORM微型框架
- 人脸验证算法Joint Bayesian详解及实现(Python版)
- 【详解】b站改版后获取当前正在观看人数
- 深入理解 Session 与 Cookie
- Jquery UI之dialog return false注意
- 通过Messenger与后台连接(单向操作,activity向service发送数据)
- 微型 ORM-FluentData
- SpringMVC 处理异常的4种方式
- C#回顾
- 后台接口测试
- 中文的排序
- Androd对齐问题
- Android中自定义Activity和Dialog的位置大小背景和透明度等
- 通过messenger实现activity与service的相互通信
- iOS CAShapeLayer精讲