在Visual Studio LightSwitch 2011中引用WCF RIA Service數(shù)據(jù)源
在VSLS2011中,對已有數(shù)據(jù)類型提供了三種加載方法,一是SQL Server數(shù)據(jù)庫,一種是SharePoint列表,還有一種就是WCF RIA Service,如下圖:
這篇博文就說明一下怎么加載WCF RIA Service。
首先來了解一下本例的數(shù)據(jù)結(jié)構(gòu):
寵物主人表和寵物信息表,這間的關(guān)系是一對多。
打開vs2010,創(chuàng)建一個名稱為“Pet_Service”的“WCF RIA Services類庫”項目,在Pet_Service.Web項目中,添加一個“ADO.NET實(shí)體數(shù)據(jù)模型”新項,名稱為“PetModel.edmx”,并且導(dǎo)入數(shù)據(jù)庫中的Pets表和Hosters表(詳細(xì)步驟可查看ADO.NET Entity Framework相關(guān)知識),然后生成一下Pet_Service項目(注意:這里必需生成一下,否則接下的步驟看不到相關(guān)實(shí)體)。然后再選擇Pet_Service.Web項目,添加新項“域服務(wù)類”,命名為“Pet_DS”,在彈出的域服務(wù)類對話框中選中“公開OData終結(jié)點(diǎn)”,并選中上面創(chuàng)建的實(shí)體類,如下圖:
單擊“確定”,生成本項目。
在相同解決方案中創(chuàng)建LightSwitch項目“PetManage”,右鍵Data Sources,選擇“Add Data Source…”,選擇“WCF RIA Service”,下一步,在“Attach Data Source Wizard”中,選擇“Add Reference”,選擇“項目”選項卡,選擇“Pet_Service.Web”項目,下一步,并選中“Entities”多選框,完成,就會自動生成兩個數(shù)據(jù)源實(shí)體表“Hoster”和“Pet”。
此時,右鍵“Screen”,添加界面,選擇“Search Data Screen”,“Screen Data”選擇“Pet_DSData.Hoster”,單擊OK,運(yùn)行,查看效果,會發(fā)現(xiàn)界面與數(shù)據(jù)源是沒有連接上的,查詢不出任何數(shù)據(jù),出現(xiàn)這種情況是因為在LightSwitch項目運(yùn)行時,執(zhí)行程序會讀取項目文件夾下的Bin目錄中Debug文件夾下的web.config文件中的WCF RIA Service數(shù)據(jù)源的連接字符串,因為這個連接字符串是在WCF RIA Service下存放,所以這個web.config下放的是<add name="Pet_Service.Web.Pet_DS" connectionString="" />,連接字符串為空,所以造成這個情況的,但如果在這里把WCF RIA Service中的連接字符串考過來,在LightSwitch項目編譯時,會重置connectionString的值,會還原成空值,為了編譯和生成時都能正常調(diào)試,需要在“WCF RIA Service”項目,Pet_DS.cs中添加如下代碼:
protected override PetManagementEntities CreateObjectContext()
{
string constr = ConfigurationManager.ConnectionStrings["Pet_Service.Web.Pet_DS"].ConnectionString;
if (string.IsNullOrEmpty(constr))
{
EntityConnectionStringBuilder Connection = new EntityConnectionStringBuilder();
Connection.ProviderConnectionString = "data source=服務(wù)器IP;initial catalog=數(shù)據(jù)庫名;user id=用戶名;password=密碼";
Connection.Provider = "System.Data.SqlClient";
Connection.Metadata = "res://*/PetModel.csdl|res://*/PetModel.ssdl|res://*/PetModel.msl";
return new PetManagementEntities(Connection.ToString());
}
else
{
return new PetManagementEntities(constr);
}
}
上面的代碼意思如果取不到配置文件中的連接字符串,就用硬編碼的字符串,這種情況適合在編譯是使用,當(dāng)程序發(fā)布后,添加web.config中的<add name="Pet_Service.Web.Pet_DS" connectionString="" />節(jié)點(diǎn)的連接字符串的值,上面的硬編碼的連接字符串就不起作用了。這樣,就完成了一個LightSwitch連接WCF RIA Service例子了。