儲存過程與Entity Framework

2021-09-06 05:40:51 字數 1117 閱讀 2666

人們已經寫過許多以物件關係對映(orm)工具及其種種問題為主題的文章。大多數反對意見可歸為兩類:關注點分離和物件導向設計。對於entity framework(實體框架)而言,我們有些好訊息。

關注點分離(separation of concerns)

對於接下來的兩個版本,entity framework打算讓使用儲存過程變得更容易。在即將發布的版本5中,我們發現急需錶值(table-valued)函式,以及往模型中批量匯入儲存過程的能力。

錶值函式(table-valued functions,縮寫為tvf)與物件關係對映工具的配合可謂天衣無縫。與普通的儲存過程或檢視相比,錶值函式則要靈活許多,不過離開了動態sql語句生成,那麼就無法充分利用它們了。而且實際上,sql語句生成是將物件關係對映從被美化的資料對映器中分離出來的關鍵功能。

遺憾的是,只有開發者可以使用這些建模工具。如果你正在用entity framework的code first技術,那麼你必須一直等到entity framework 6才能獲得某種形式的儲存過程支援,而對錶值函式的支援就更別提了。

物件導向設計(object oriented design)

物件導向程式設計是個棘手的話題。從本質上講,物件關係對映工具希望簡化為資料傳輸物件(data transfer object,dto)風格的一些物件,即擁有預設建構函式和公共屬性,從而物件關係對映工具就可以分層執行延遲載入、跟蹤變更等等。但是那些偏愛面向對 象設計的開發者往往喜歡擁有複雜建構函式、以及有限的公共介面的複雜物件(rich object)。譬如createdby(建立者)或createddate(建立日期)這樣的列應該用唯讀欄位和相應的屬性來表示,因此就沒有機會意外更改它們的值了。

遺憾的是,我們近期內將不會看到這種情況。你可以使用私有設定器(private setter)來完成某些事情,但總體而言,與真正的業務物件相比,實體仍然還是更像資料傳輸物件。長期來看,自定義code first約定(custom code first conventions)會有所幫助。這個有前途的功能本打算成為ef 4.1的組成部分,但是由於該設計的複雜性而被砍掉,而且總體感覺它只是沒有準備好。sergey barskiy寫了一篇文章來說明本打算做些什麼。

儲存過程與儲存函式

plsql中語法 create or replace procedure 過程名 引數名 in out 型別 asbegin end 宣告pro add sal儲存過程,作用是給指定員工漲1000元工資,並列印出漲前和漲後工資 create orreplace procedure pro add s...

函式與儲存過程

函式是命名了的 儲存在資料庫中的 pl sql 程式塊。函式接受零個或多個輸入引數,有乙個返回值,返回值的資料型別在建立函式時定義。定義函式的語法如下 function name parameter parameter,return datatypes is local declarations b...

儲存過程與注入

動態構建sql,不可sql注入 create procedure dbo membertestselect2 username nvarchar 50 password nvarchar 50 as begin set nocount on declare err int declare sqlst...