引言:FluentData 是微型 ORM(micro-ORM)家族的一名新成員,旨在比大型 ORM(full ORM)更加易用。FluentData 于(2012-02月)推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。
樓主在今年二月份看到博客園新聞中的推薦(http://news.cnblogs.com/n/132803/),然后在項目組的開發(fā)中接觸到了這個ORM。 比起Entity Framework 和 NHibernate,都過于復雜而且難于學習.FluentData就簡單的多了。不過樓主當時也是剛開始了解ORM和MVC,所以并沒有接觸過Entity Framework 和 NHibernate.不過對于小型站點而言,這個ORM是力薦大家了解下的.該ORM允許開發(fā)人員擁有對 SQL 較多的控制,而不是依賴 ORM 進行自動生成。它不僅可以使用 SQL 來執(zhí)行查詢、增添和更新操作,還可以支持使用存儲過程和事務。根據(jù)文檔描述,F(xiàn)luentData 可以在不改動已有結構的情況下,與任何業(yè)務對象一同工作。
下面樓主將一一舉例向大家介紹樓主在開發(fā)過程中的運用.
一:下載該項目并且引用FluentData.dll,或者直接在解決方案中添加該開源項目.項目地址:http://fluentdata.codeplex.com/
二.dll引用入到我們的數(shù)據(jù)業(yè)務層.
它是我們與數(shù)據(jù)庫操作中的上下文,所有的有關數(shù)據(jù)操作都調用它下面的方法。初始化它的連接字符串web.config
public static IDbContext QueryDB() { return new DbContext().ConnectionStringName("testDBContext", DbProviderTypes.SqlServer); }
<connectionStrings> <add name="testDBContext" connectionString="server=192.168.1.100;uid=sa;pwd=sa!;database=testDB;" /> </connectionStrings>
那么下面就可以在我們的數(shù)據(jù)業(yè)務層中根據(jù)自己的需求隨心所欲的寫sql了。
Product product = QueryDB().Sql(@"select * from Product where ProductId = 1").QuerySingle<Product>();
Product product = QueryDB().Sql("select * from Product where id=@id") .Parameter("id", id) .QuerySingle<Product>();
List<Product> product = QueryDB().Sql("select * from Product where id=@id") .Parameter("id", id) .Query<Product>();
using (var command = QueryDB().MultiResultSql()){ List<Category> categories = command.Sql( @"select * from Category; select * from Product;").Query<Category>(); List<Product> products = command.Query<Product>();}
var productId = QueryDB().Insert("Product") .Column("Name", "The Warren Buffet Way") .Column("CategoryId", 1) .ExecuteReturnLastId();
var productId = QueryDB().Sql(@"insert into Product(Name, CategoryId) values('The Warren Buffet Way', 1);").ExecuteReturnLastId();
QueryDB().Update("Product") .Column("Name", "The Warren Buffet Way") .Column("CategoryId", 1) .Where("ProductId", 1) .Execute();
同上,也可以不用update()方法,而直接寫sql.
QueryDB().Delete("Product").Where("ProductId", 1).Execute();
QueryDB().Delete<Product>("Product") .Where(x=>x.id,id) .Execute();
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();方法的執(zhí)行,樓主曾經在自己的一個項目中需要用到事物,卻忘記了執(zhí)行提交這個方法,最后在源碼的汪洋中探索許久。
有關存儲過程的使用,樓主在實際項目開發(fā)中,用上了存儲過程。該存儲過程的作用是分頁,那么這里也貼出來分享一下
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接口下的方法也有支持返回一個動態(tài)類型的,所以擴展性也不弱。具體的就在于靈活的運用。
至此;寫到這里一定很激動了吧,大伙有時間有機會的話,也去嘗試下吧?!稖毓手孪盗小反宋募o念下以前公司項目組的我和那老幾位在青春的歲月中的激情??!
聯(lián)系客服