【问题标题】:Dynamic Data with Entity Framework and RIA Services具有实体框架和 RIA 服务的动态数据
【发布时间】:2009-06-12 14:44:54
【问题描述】:

这个问题是另一个问题的延伸,但我认为它值得拥有自己的主题。见See Silverlight Question

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

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

【问题讨论】:

    标签: entity-framework silverlight-3.0 wcf-ria-services


    【解决方案1】:

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

    因此,我看到了一些选择。

    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 中,可能支持返回标量值的 proc。我不记得是不是这样。
    5. 您始终可以从实体连接中获取标准数据库连接,并使用常规 SqlCommands 直接执行该过程。不幸的是,这使您的代码特定于数据库提供者,但它可能是解决您的问题的最简单的方法。事实上,使用这样的过程已经是特定于数据库服务器的。

    【讨论】:

    • +1 谢谢。 .NET 4.0 真的不是一个选择。我倾向于#1,但到目前为止我无法想到另一种选择(请参阅我的相关问题)。如果我选择#5,这些列是否可以通过属性获得。如果正确理解 Silverlight 数据网格文档,则只能将列绑定到属性。
    【解决方案2】:

    您可以使用 WCF Web 服务包装器来访问您的 SP 并使用 WCF 服务作为数据源 Brad Abrams 在他关于 RIA 服务的系列文章中可以做到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多