(PDF.NET框架例項講解)將儲存過程對映為實體類
PDF.NET資料開發框架可以將表,檢視,表值函式,自定義的查詢語句和儲存過程對映為實體類,在上一篇《(PDF.NET框架例項講解)將任意複雜的SQL查詢對映成實體類 》已經講解了自定義查詢的實體類對映方法,今天來講講儲存過程的對映操作。
1,使用程式碼工具,生成實體類程式碼
具體過程跟“上一篇”文章中的步驟1-4一樣,請參見原文。
注意為了獲得儲存過程的表架構,需要在下圖的視窗中輸入類似的程式碼:
exec 儲存過程名稱 引數值1,引數值2
這裡我們輸入
exec GetExcellentDetails 'A',3
查詢名稱和實體類名稱都輸入為“InvestmentSolutionData”,在我們的Model專案下面將會生成一個檔案 InvestmentSolutionData.cs
2,修改剛才生成的實體類檔案,設定“對映為儲存過程”:
public partial class InvestmentSolutionData : EntityBase { public InvestmentSolutionData() { TableName = "WStModel.Entitys.InvestmentSolutionData"; EntityMap=EntityMapType.StoredProcedure; //IdentityName = "標識欄位名"; //PrimaryKeys.Add("主鍵欄位名"); } //其它屬性略 }
也就是這一句:EntityMap=EntityMapType.StoredProcedure
3,修改剛才生成的實體查詢配置檔案 EntitySqlMap.config
修改前:
<?xml version="1.0" encoding="utf-8"?> <configuration> <Namespace name="DemoNameSpace"> <Map name="DemoSqlName"> <Sql><![CDATA[ select * from table ]]></Sql> </Map> </Namespace> <Namespace name="WStModel.Entitys"> <Map name="InvestmentSolutionData"> <Sql> <![CDATA[ exec GetExcellentDetails 'A',3 ]]></Sql> </Map> </Namespace> </configuration>
修改後:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<Namespace name="DemoNameSpace">
<Map name="DemoSqlName">
<Sql><![CDATA[ select * from table ]]></Sql>
</Map>
</Namespace>
<Namespace name="WStModel.Entitys">
<Map name="InvestmentSolutionData">
<Sql>
<![CDATA[
GetExcellentDetails
#solution:String,String,2#,
#yield:Int32#
]]></Sql>
</Map>
</Namespace>
</configuration>
因為儲存過程 GetExcellentDetails 有兩個引數,所以需要在這裡顯式的指明,引數solution 是varchar(2)型別,引數yield 是int 型別,按照SQL-MAP的語法規則(參見《PDF.NET(PWMIS資料開發框架)之SQL-MAP目標和規範 》),改寫成上面的樣子。(注:之所以要用該語法,是為了遮蔽具體資料庫的差異)
4,編寫程式碼,使用“儲存過程”實體類
使用“儲存過程”實體類跟使用其它型別的實體類比較類似,但儲存過程可能有引數,所以需要初始化引數值,例項程式碼如下所示:
public IEnumerable<IInvestmentSolutionData> GetSolutionData(string solutionName,int period)
{
//InvestmentSolutionData 為儲存過程實體類
InvestmentSolutionData entity = new InvestmentSolutionData();
OQL q = new OQL(entity);
q.InitParameters = new Dictionary<string, object>();
q.InitParameters.Add("solution", solutionName);
q.InitParameters.Add("yield", period);
//執行查詢
q.Select();
List<InvestmentSolutionData> list = EntityQuery<InvestmentSolutionData>.QueryList(q);
return list;
}
上面的例子中,呼叫了OQL物件的InitParameters 屬性,初始化實體類查詢需要的值。
目前,PDF.NET的程式碼生成器還不能自動生成以上程式碼,如果要“享受自動生成程式碼”的過程,則需要使用框架的“SQL-MAP”技術,參見《抽象SQL(引數化)查詢 》一文。不過使用本文介紹的“儲存過程”實體類對映技術,在使用方式上更靈活,至少你不用單獨去生成一個DAL層了。
注:本文所說的功能需要在PDF.NET 4.1以上支援,PDF.NET本身僅需要.net 2.0支援,框架的最新版本沒有公開發布,但已經有不少使用者正在專案裡面使用,有關框架的詳細資訊請看官網介紹: http://www.pwmis.com/sqlmap