2011-12-21 98 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