Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight SP和EF&;Ria服务_Silverlight_Entity Framework_Service_Ria - Fatal编程技术网

Silverlight SP和EF&;Ria服务

Silverlight SP和EF&;Ria服务,silverlight,entity-framework,service,ria,Silverlight,Entity Framework,Service,Ria,随着EF4.0的发布,对SQL server存储过程的支持越来越多。 SP的结果数据集可以自动生成复杂类型。 但Ria服务不支持复杂类型 当我尝试将ria服务与EF 4.0结合使用时,我希望通过SP获取数据集。此结果未映射到任何实体/表 社区建议的一些解决方案是: 1.创建视图以映射sp结果。(但对于EF,如果没有ID或主ID,则无法映射到任何实体) 2.创建实体以映射sp结果。(为此,您甚至需要映射sp for CRUD,即使我不需要此sp结果的CUD) 此外,上述解决方案无法自动化。由于数据

随着EF4.0的发布,对SQL server存储过程的支持越来越多。 SP的结果数据集可以自动生成复杂类型。 但Ria服务不支持复杂类型

当我尝试将ria服务与EF 4.0结合使用时,我希望通过SP获取数据集。此结果未映射到任何实体/表

社区建议的一些解决方案是: 1.创建视图以映射sp结果。(但对于EF,如果没有ID或主ID,则无法映射到任何实体) 2.创建实体以映射sp结果。(为此,您甚至需要映射sp for CRUD,即使我不需要此sp结果的CUD)

此外,上述解决方案无法自动化。由于数据库对象可能会随着时间而改变,自动更新edm将丢失上述解决方案


那么解决办法是什么呢?我希望尽可能地将数据操作放回数据库,以便可以在数据库中进行许多更改,而无需重建.net程序集(这会导致重新部署)

同样的问题在我们的开发中多次出现。我们选择实现的工作是使用POCO(普通旧CLR对象)实现WCF RIA服务

使用POCO,我们可以实现一个域服务,该服务通过我们手工创建的对象与客户机通信。这使我们能够通过服务器上的任何技术(EF或任何真正的技术)访问数据库,从而允许我们在客户机上使用存储过程和RIA

当然,这个过程为系统增加了一个时髦的步骤。您必须将POCO维护到DB的存储过程中

简单的例子:

[EnableClientAccess()]
public class FooBarService : LinqToEntitiesDomainService<MyDBEntities>
{
    public IQueryable<FooBar> GetFooBar()
    {
        var qry =   from FooBarSPs in this.ObjectContext.FooBarSPs
                orderby FooBarSPs.Name
                select new FooBar
                {
                    ID = FooBarSPs.ID,
                    Name = FooBarSPs.Name
                };
        return qry;
    }
}
[EnableClientAccess()]
公共类FooBarService:LinqToEntitiesDomainService
{
公共IQueryable GetFooBar()
{
var qry=来自this.ObjectContext.FooBarSPs中的FooBarSPs
orderby FooBarSPs.Name
选择新FooBar
{
ID=FooBarSPs.ID,
Name=FooBarSPs.Name
};
返回qry;
}
}
如果您必须使用WCF RIA服务,并且希望与存储过程通信,那么使用POCO对象作为信使是我见过的最简单的方法

我建议观看布拉德·艾布拉姆去年在MIX09上的演讲: