在Visual Studio LightSwitch 2011中引用WCF RIA Service數據源
在VSLS2011中,對已有數據類型提供了三種加載方法,一是SQL Server數據庫,一種是SharePoint列表,還有一種就是WCF RIA Service,如下圖:
這篇博文就說明一下怎么加載WCF RIA Service。
首先來了解一下本例的數據結構:
寵物主人表和寵物信息表,這間的關系是一對多。
打開vs2010,創建一個名稱為“Pet_Service”的“WCF RIA Services類庫”項目,在Pet_Service.Web項目中,添加一個“ADO.NET實體數據模型”新項,名稱為“PetModel.edmx”,并且導入數據庫中的Pets表和Hosters表(詳細步驟可查看ADO.NET Entity Framework相關知識),然后生成一下Pet_Service項目(注意:這里必需生成一下,否則接下的步驟看不到相關實體)。然后再選擇Pet_Service.Web項目,添加新項“域服務類”,命名為“Pet_DS”,在彈出的域服務類對話框中選中“公開OData終結點”,并選中上面創建的實體類,如下圖:
單擊“確定”,生成本項目。
在相同解決方案中創建LightSwitch項目“PetManage”,右鍵Data Sources,選擇“Add Data Source…”,選擇“WCF RIA Service”,下一步,在“Attach Data Source Wizard”中,選擇“Add Reference”,選擇“項目”選項卡,選擇“Pet_Service.Web”項目,下一步,并選中“Entities”多選框,完成,就會自動生成兩個數據源實體表“Hoster”和“Pet”。
此時,右鍵“Screen”,添加界面,選擇“Search Data Screen”,“Screen Data”選擇“Pet_DSData.Hoster”,單擊OK,運行,查看效果,會發現界面與數據源是沒有連接上的,查詢不出任何數據,出現這種情況是因為在LightSwitch項目運行時,執行程序會讀取項目文件夾下的Bin目錄中Debug文件夾下的web.config文件中的WCF RIA Service數據源的連接字符串,因為這個連接字符串是在WCF RIA Service下存放,所以這個web.config下放的是<add name="Pet_Service.Web.Pet_DS" connectionString="" />,連接字符串為空,所以造成這個情況的,但如果在這里把WCF RIA Service中的連接字符串考過來,在LightSwitch項目編譯時,會重置connectionString的值,會還原成空值,為了編譯和生成時都能正常調試,需要在“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=服務器IP;initial catalog=數據庫名;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);
}
}
上面的代碼意思如果取不到配置文件中的連接字符串,就用硬編碼的字符串,這種情況適合在編譯是使用,當程序發布后,添加web.config中的<add name="Pet_Service.Web.Pet_DS" connectionString="" />節點的連接字符串的值,上面的硬編碼的連接字符串就不起作用了。這樣,就完成了一個LightSwitch連接WCF RIA Service例子了。