2009-06-12 48 views
2

这个问题是另一个问题的延伸,但我认为它保证自己的线程。请参阅See Silverlight Question动态数据与实体框架和RIA服务

我有一个存储过程(SQL 2005),每次调用它时都会返回一个动态数据集(不同的列/模式)。

我想在Silverlight 3.0中使用这个,所以我需要以某种方式使用实体框架和RIA服务来连接它。我也需要这是Bindable(Silverlight网格),所以我需要这些动态列可以通过属性(网格限制)访问。有任何想法吗?

回答

2

在实体框架的当前出货版本中,您可以映射的唯一类型的存储过程是那些返回实体类型的存储过程。通常在编译之前就完成了映射,尽管在运行时至少理论上可能生成实体框架元数据。

因此,我看到了几个选择。

  1. 放弃使用不返回已定义模式的过程的整个想法。在编译之前,您将永远无法映射这样的过程。
  2. 动态生成EDMX在运行时为了在调用之前将实体类型映射到过程的预期输出列。请注意,实体框架的当前版本对程序返回的列有点挑剔;你可以在MSDN上找到关于这个的文档。
  3. 在.NET 4.0中,有new features which allow you to inform the Entity Framework about your client schema at runtime without having to generate EDMX first。您可能能够利用这些功能来将某些实体类型映射到过程的预期输出列。
  4. 同样,在.NET 4.0中,可能会支持返回标量值的特效。我不记得这是否是这种情况。
  5. 您可以始终从实体连接获取标准数据库连接,并使用常规SqlCommands直接执行该过程。不幸的是,这使得您的代码数据库提供程序特定,但它可能是解决您的问题最简单的方法。事实上,完全使用这样的过程已经是数据库服务器特定的。
+1

+1感谢系列文章。 .NET 4.0确实不是一种选择。我倾向于#1,但到目前为止,我无法想到另一种选择(请参阅我的相关问题)。如果我选择#5,这些列是否可以通过属性获得。如果正确理解Silverlight数据网格文档,则只能将列绑定到属性。 – 2009-06-13 01:18:04

0

您可以使用一个WCF Web服务wraper为accesing您的SP和使用WCF服务作为数据源布拉德·艾布拉姆斯有办法做到这一点谈了他对RIA服务