解决方案SP和EF& Ria服务

时间:2010-04-15 19:01:56

标签: silverlight entity-framework service ria

随着EF 4.0的发布,更多支持SQL Server存储过程。 可以为SP的结果数据集自动生成复杂类型。 但Ria Service不支持复杂类型。

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

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

上述解决方案也无法实现自动化。由于数据库对象可能随时间而变化,因此自动更新edm将失去上述解决方案。

那么解决方案是什么?我想尽可能地将数据操作放回到DB,这样可以在DB中完成许多更改,而无需重建.net程序集(这会导致重新部署)。

1 个答案:

答案 0 :(得分:0)

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

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

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

简单示例:

[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;
    }
}

如果你必须使用WCF RIA服务,并且想要与存储过程交谈,那么使用POCO对象作为信使是我见过的最简单的方法。

我建议去年在Mix 09观看Brad Abram的演讲: http://videos.visitmix.com/MIX09/T40F