2011-12-21 97 views
0

我是Silverlight RIA服務的新手,我有一個基本的工作原型,它使用RIA服務和EntityFramework。現在我已經轉向實際項目,我想知道如何使用非EntityFramework對象,但仍然使用RIA控件,如System.Windows.Controls.DomainServices.DomainDataSource,以便我可以分頁等。例如,在我的工作原型,我有:Silverlight 4 w/RIA Services

[EnableClientAccess()] 
public class RequestService : LinqToEntitiesDomainService<MyEntities> 
{ 
    public IQueryable<RequestData> GetRequests() 
    { 
     ... LINQ query removed ... 
    } 
} 

當我改變的IQueryable <的RequestData >到的IQueryable <MyRequestData>其中MyRequestData是我創建了一個自定義的公共類(和轉換實體數據),然後重新生成應用程序時,客戶端Silverlight應用程序不再看到查詢(構建錯誤)。

所以我的問題是,我怎樣才能以類似的方式利用這些自定義對象到EntityFramework對象,以便我仍然可以應用分頁等?

回答

0

您可以創建一個POCO類和分配的關鍵屬性,其屬性是這樣的一個...

public class MyClass 
{ 
    [Key] 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

然後你就可以創建一個包含一種方式來獲得在像POCO類的DomainService類這...

[EnableClientAccess()] 
public class DomainService1 : DomainService 
{ 
    public List<MyClass> GetData() 
    { 
     return new List<MyClass>(){new MyClass{Name = "Henry", Age = 33}}; 
    } 
} 

此方法返回MyClass的列表,其中包含一個元素。但你幾乎可以返回任何東西。

然後在客戶端可以調用域名服務是這樣的...

public MainPage() 
     { 
      InitializeComponent(); 
      DomainService1 ds1 = new DomainService1(); 
      var x = ds1.Load(ds1.GetDataQuery()); 
      x.Completed += new EventHandler(x_Completed); 
     } 
     void x_Completed(object sender, EventArgs e) 
     { 
      // process the results here 
     } 

在事件回調,你可以投sender參數的LoadOperation,並得到你想要的數據...

訣竅來自於使用'Key'屬性。這使整個事情工作。

+0

這正是我所看到的。在我做的所有Google搜索中,我從來沒有發現有關POCO對象的任何信息。我認爲它主要是因爲所有的網站都集中在​​EntityFramework,NHibernate等。 – guyaton 2011-12-21 13:56:30

+0

我很高興它有幫助。我也有很多關於SL RIA入門的問題。請務必答覆答案,以便人們知道您對答覆感到滿意。 – 2011-12-21 18:21:20

+0

我會...如果我有15個聲望....這只是我第二次發佈在stackoverflow上。 – guyaton 2011-12-21 20:34:47