九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
微型 ORM-FluentData 溫故知新系列

微型 ORM-FluentData 溫故知新系列

引言: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è)務層.

1.)創(chuàng)建并且初始化一個IDbContext.

它是我們與數(shù)據(jù)庫操作中的上下文,所有的有關數(shù)據(jù)操作都調用它下面的方法。初始化它的連接字符串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>

 那么下面就可以在我們的數(shù)據(jù)業(yè)務層中根據(jù)自己的需求隨心所欲的寫sql了。

1.需要返回一個實體:

Product product = QueryDB().Sql(@"select * from Product                where ProductId = 1").QuerySingle<Product>();

 2.根據(jù)參數(shù)返回一個實體?別急,嘗嘗那飄渺的鏈式操作吧

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();方法的執(zhí)行,樓主曾經在自己的一個項目中需要用到事物,卻忘記了執(zhí)行提交這個方法,最后在源碼的汪洋中探索許久。

11.存儲過程

有關存儲過程的使用,樓主在實際項目開發(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念下以前公司項目組的我和那老幾位在青春的歲月中的激情??!

 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
LINQ篇:查詢句法
使用WebsharpDAO實現(xiàn)O/R Mapping和持久層
在MongoDB中實現(xiàn)聚合函數(shù)
我開發(fā)了一款基于web容器的前端項目容器
靈動思緒EF(Entity FrameWork)
Dapper、Entity Framework 和混合應用
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服