2010-03-22 49 views
1

是否有可能在Linq to SQL類或實體框架中使用ASP.NET動態數據和SubSonic 3?如果使用SubSonic生成的上下文類,MetaModel.RegisterContext()將引發異常。我想我記得在SubSonic 3發佈之前找到了一個SubSonic/Dynamic Data例子,但現在我找不到它了。有沒有人能夠得到這個工作?是否可以使用ASP.NET動態數據和SubSonic 3?

回答

2

我剛剛在Visual Studio 2010中使用SQLite數據庫在Subsonic 3.0.0.4 ActiveRecord上工作了一段時間,稍微工作一番之後,我試着記錄下這些步驟爲您帶來的好處。

開始加入了新項目 - > WCF數據服務到你使用託管您的webapp項目/ web服務,然後修改它類似於下面我PinsDataService.svc.cs:

public class PinsDataService : DataService<PINS.Lib.dbPINSDB> 
{ 
    // This method is called only once to initialize service-wide policies. 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("*", EntitySetRights.All); 
     config.UseVerboseErrors = true; 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
    } 
} 

此時,如果您完全匹配所有數據庫命名約定,那麼您的動態數據服務可能會工作,但我沒有那種運氣。在我ActiveRecord.tt模板,我有公共部分類的聲明之前,下面兩行前面加上:

[DataServiceKey("<#=tbl.PrimaryKey #>")] 
[IgnoreProperties("Columns")] 
public partial class <#=tbl.ClassName#>: IActiveRecord { 

然後我添加引用System.DataSystem.Data.Services.Client接着使用System.Data.Services和使用系統數據服務。常規使用ActiveRecord.tt模板的使用語句爲

下一步是使用從這篇博客的http://blogs.msdn.com/aconrad/archive/2008/12/05/developing-an-astoria-data-provider-for-subsonic.aspx部分IUpdateable類的實現,改變public partial class dbPINSDB : IUpdatable以配合我的亞音速數據庫名在Settings.ttinclude

然後消耗在一個單獨的客戶端應用程序的數據申報/庫我開始從我的客戶端應用程序添加一個「服務引用」命名PinsDataService到PinsDataService.svc和進城:

PinsDataService.dbPINSDB PinsDb = 
new PinsDataService.dbPINSDB(new Uri("http://localhost:1918/PinsDataService.svc/")); 
PinsDataService.Alarm activeAlarm = 
    PinsDb.Alarms.Where(i => i.ID == myAA.Alarm_ID).Take(1).ElementAt(0); 

注意我如何做一個在哪裏查詢,返回只有1個對象,但我Ť (1),然後ElementAt(0),因爲當我嘗試使用SingleOrDefault()或First()時不斷髮生錯誤,希望這有幫助 - 另外,我已經意識到dbPINSDB是一個確實我的亞音速數據庫的名稱不正確;)