随着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程序集(这会导致重新部署)。
答案 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