日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EntityModelStudio系列教程5--EMLib框架之Eql

發布時間:2025/4/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EntityModelStudio系列教程5--EMLib框架之Eql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從本章開始將使用兩章節的篇幅來介紹EMLib框架,這一章介紹Eql相關的內容。在介紹Eql內容之前需要做一個準備工作,那就是開發環境的配置,這是一個非常簡單的工作。

一.配置開發環境

由于筆者使用的是VS2010,所以用VS2010作為開發環境來介紹,但是所講述的內容同樣適用于VS2008。首先創建一個新的工程,語言是C#,類型是Windows Form Application,工程名字和保存目錄位置任意。創建完成后如下圖所示:

鼠標右擊工程節點,在彈出菜單中選擇Add—>Existing Item…,打開生成源代碼所在的目錄。先添加EDModel.Biz.EDExtern文件夾中的EDModel.cs文件,注意是引用添加,如圖所示:

然后添加EDModel.Biz.EDCustom文件夾中的文件,注意是復制添加,即直接點擊Add按鈕就,如下圖所示:

添加完成后如下圖所示:

接著引用EMLib動態鏈接庫。EMLib.dll文件在EMStudio安裝目錄的EMLib文件夾下。鼠標右擊References節點,在彈出菜單中選擇Add Reference…,打開EMStudio安裝目錄,再打開EMLib文件夾,添加EMLib.dll文件。添加完以后,如下圖所示:

最后一步是在源代碼文件中添加命名空間,打開Form.cs文件,在文件頭部加入EMLib命名空間的引用和生成的源代碼所在命名空間的引用,如下圖所示:

至此開發環境就配置完成了。

一.Eql基本語句的使用

Eql的全稱是實體查詢語言(Entity Model Studio),這是一種基于宿主語言的編程接口。允許開發者以方法連續調用的方式,非常方便和靈活的構造出各種復雜程度的語句對象。其開發效率明顯高于傳統字符串拼接構造Sql語句的方式。同時基于Eql語句對象,可以使用EMLib完成所有強大的ORM功能。以下是查詢,更新,插入,刪除語句的演示代碼,讀者可以自行輸入源代碼完成實際的Eql語句對象的構造。

查詢語句:

更新語句:

插入語句:

刪除語句:

三.從Eql語句對象獲得Sql語句文本

EMLib直接支持從Eql語句對象獲得對應等價文本的功能,舉例代碼如下圖所示:

StmtTextUnit有兩個屬性,一個是TextWithParam,這個就是對應的等價文本;另一個是Parms,這個是語句文本中用到的參數的對象。可以看到上述代碼為了得到Sql文本首先生成了一個EMContext的對象,調用的是MyContext中方法。這個類和方法是自動生成的,在EDModel.cs文件中。該方法的第一個參數是模型文件所在位置。模型文件在生成源代碼時自動生成,在EDModel.Biz.EDExtern文件夾中,是一個xml文件。第二個參數是EMLib的許可證文件。在EMStudio通過注冊后該文件會被自動生成,位置在EMStudio安裝目錄的EMLib文件夾中,是一個dat文件。關于EMContext對象的內容,在下一章節EMLib框架之Orm中還會進一步詳細介紹。

用EqlBuildSqlText可以為上面四個語句對象生成對應的等價文本,如下所示:

查詢語句:

SELECT Company.ID, Company.Address, Company.CompanyName, 'Company' AS CurrEntityTag
FROM Company WHERE Company.ID > @ParamName1

更新語句:

UPDATE Company SETCompany.CompanyName = @ParamName1,Company.Address = NULL FROM Company WHERE Len(Company.Address) < @ParamName2

插入語句:

INSERT INTO Company (Company.CompanyName, Company.Address) VALUES (@ParamName1, NULL)

刪除語句:

DELETE Company FROM Company WHERE Len(Company.Address) < @ParamName1

四.Eql對多態的支持

Eql對多態的支持是非常徹底而完整的,從語句結構和ORM功能角度來說,這種對多態性的支持是完備的。下面簡單的演示兩個例子來介紹這種對多態性的支持,更為詳細的介紹在下一章節中完成。構造如下的Eql語句對象:

這是一個對BaseEntity實體執行多態查詢的Eql語句對象,其對應的等價文本如下:

SELECT BaseEntity.ID, BaseEntity.BaseName, BaseEntity.CurrEntityTag FROM (SELECT BaseEntity.ID, BaseEntity.BaseName, 'BaseEntity' AS CurrEntityTag FROM BaseEntity UNION ALL SELECT SubEntity.ID, SubEntity.BaseName, 'SubEntity' AS CurrEntityTag FROM SubEntity) AS BaseEntity WHERE BaseEntity.ID > @ParamName1

構造如下的刪除語句:

這表示要對實體BaseEntity執行多態刪除,也就是要刪除BaseEntity及其子類的滿足條件的數據。其對應的等價文本就是兩條刪除語句:

DELETE PolySubjectFROM (SELECT BaseEntity.ID, BaseEntity.BaseName, 'BaseEntity' AS CurrEntityTagFROM BaseEntity UNION ALLSELECT SubEntity.ID, SubEntity.BaseName, 'SubEntity' AS CurrEntityTagFROM SubEntity) AS BaseEntity, BaseEntity AS PolySubjectWHERE BaseEntity.ID > @ParamName1 ANDBaseEntity.CurrEntityTag = 'BaseEntity' ANDPolySubject.ID = BaseEntity.IDDELETE PolySubjectFROM (SELECT BaseEntity.ID, BaseEntity.BaseName, 'BaseEntity' AS CurrEntityTagFROM BaseEntity UNION ALLSELECT SubEntity.ID, SubEntity.BaseName, 'SubEntity' AS CurrEntityTagFROM SubEntity) AS BaseEntity, SubEntity AS PolySubjectWHERE BaseEntity.ID > @ParamName1 ANDBaseEntity.CurrEntityTag = 'SubEntity' ANDPolySubject.ID = BaseEntity.ID

五.子查詢

如下圖所示是一個子查詢的例子:

為了方便閱讀和理解也可以拆分寫成如下的形式:

兩者是完全等價的。以這種方式開發者可以用Eql接口非常方便的構造出各種復雜程度的語句對象。

?

本節內容到此已全部講述完畢,如果有疑問,或者需要技術支持可以訪問我們網站:http://www.WideUnion.com。提出您的問題或者在論壇中提交問題,同時我們也非常希望能聽到您的建議和需求,以便我們為您提供更好的產品和服務。

轉載于:https://www.cnblogs.com/WideUnion/archive/2012/09/22/2698351.html

總結

以上是生活随笔為你收集整理的EntityModelStudio系列教程5--EMLib框架之Eql的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。