2010-04-15 148 views
0

随着EF 4.0的发布,对SQL服务器的更多支持存储过程。 可以自动为SP的结果数据集生成复杂类型。 但复杂的类型不支持Ria Service。关于SP和EF&Ria服务的解决方案

当我尝试使用与EF 4.0结合的ria服务时,我想通过SP获取数据集。这个结果没有映射到任何实体/表。

社区建议的一些修正如下: 1.创建视图来映射sp结果。 (但对于EF,如果没有ID或主要的,不能映射到任何实体) 2.创建实体来映射SP结果(为此,甚至需要为CRUD映射SP,即使我没有需要CUD关于此sp结果)

上面的解决方案也不能自动化。由于数据库对象可能随时间而改变,自动更新edm将失去解决方案。

那么有什么解决方案?我希望尽可能将数据操作返回到数据库,以便可以在数据库中完成许多更改,而不需要重新生成.net程序集(这会导致重新部署)。

回答

0

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

使用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 Brad的演讲: http://videos.visitmix.com/MIX09/T40F