Silverlight 4.0 Silverlight 4 w/RIA服务

Silverlight 4.0 Silverlight 4 w/RIA服务,silverlight-4.0,Silverlight 4.0,我是Silverlight RIA服务的新手,我有一个基本的工作原型,它利用了EntityFramework的RIA服务。现在我已经进入实际项目,我想知道如何使用非EntityFramework对象,但仍然使用RIA控件,如System.Windows.Controls.DomainServices.DomainDataSource,以便我可以分页等。例如,在我的工作原型中,我有: [EnableClientAccess()] public class RequestService : Linq

我是Silverlight RIA服务的新手,我有一个基本的工作原型,它利用了EntityFramework的RIA服务。现在我已经进入实际项目,我想知道如何使用非EntityFramework对象,但仍然使用RIA控件,如System.Windows.Controls.DomainServices.DomainDataSource,以便我可以分页等。例如,在我的工作原型中,我有:

[EnableClientAccess()]
public class RequestService : LinqToEntitiesDomainService<MyEntities>
{
    public IQueryable<RequestData> GetRequests()
    {
        ... LINQ query removed ...
    }
}
[EnableClientAccess()]
公共类RequestService:LinqToEntitiesDomainService
{
公共IQueryable GetRequests()
{
…LINQ查询已删除。。。
}
}
当我将IQueryable更改为IQueryable,其中MyRequestData是我创建的自定义公共类(并将实体数据转换为),然后重新生成应用程序时,客户端Silverlight应用程序不再看到查询(生成错误)


因此,我的问题是,如何以与EntityFramework对象类似的方式利用这些自定义对象,以便仍然可以应用分页等功能?

您可以创建一个POCO类,并将Key属性指定给它的一个属性,如下所示

public class MyClass
{
    [Key]
    public string Name { get; set; }
    public int Age { get; set; }
}
[EnableClientAccess()]
public class DomainService1 : DomainService
{
    public List<MyClass> GetData()
    {
        return new List<MyClass>(){new MyClass{Name = "Henry", Age = 33}};
    }
}
 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
        }
然后您可以创建一个DomainService类,其中包含一种获取POCO类的方法,如下所示

public class MyClass
{
    [Key]
    public string Name { get; set; }
    public int Age { get; set; }
}
[EnableClientAccess()]
public class DomainService1 : DomainService
{
    public List<MyClass> GetData()
    {
        return new List<MyClass>(){new MyClass{Name = "Henry", Age = 33}};
    }
}
 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”属性。这使整个工作顺利进行。

这正是我想要的。在我所有的谷歌搜索中,我从来没有找到任何关于POCO对象的东西。我认为这主要是因为所有的网站都集中在EntityFramework、NHibernate等网站上。我很高兴这是有帮助的。在SL RIA的起步阶段我也有很多问题。一定要对答案进行投票,让人们知道你对回答感到满意。我会……如果我有15个声誉。。。。这是我第二次在stackoverflow上发帖。