【问题标题】:Silverlight 4 and Stored ProceduresSilverlight 4 和存储过程
【发布时间】:2010-11-03 02:02:06
【问题描述】:

经过一天的研究和测试,我得到的印象是您无法使用 WFC RIA 服务从 silverlight 4 调用存储过程。

这根本不可能是真的。

由于 Silverlight 非常注重报告,我认为没有办法调用存储过程。

您可以将存储过程与 Silverlight 和 RIA 服务一起使用吗?

如果没有,是否有针对聚合数据集的解决方法>?

【问题讨论】:

    标签: c# silverlight wcf-ria-services


    【解决方案1】:

    您必须将它作为函数添加到模型中,然后作为 DomainService 的成员调用它。关键是存储过程结果必须精确映射到实体,因为 RIA 服务不允许您使用复杂类型的结果。

    也有可能不使用 RIA 并使用启用 Silverlight 的 WCF 服务。但是,您将失去所有 DomainService 功能(如 LINQ),但您可以更好地控制返回的内容和方式。

    【讨论】:

    • RIA Services SP1(几天前发布的测试版),支持复杂类型(除其他外)。
    【解决方案2】:

    我在此站点上找到了以下出色的分步指南 -

    http://betaforums.silverlight.net/forums/p/218383/521023.aspx

    1) 将 ADO 实体数据模型添加到您的 Web 项目;选择从数据库选项生成;选择要连接的数据库实例。

    2) 选择要导入模型的数据库对象。您可以展开表节点以选择要导入模型的任何表。展开存储过程节点以选择您的存储过程。单击完成以完成导入。

    3) 右键单击​​数据库模型设计器以选择添加/功能导入。为函数命名(与您的 SP 相同的名称即可)并选择您要映射的存储过程。如果您的 SP 只返回一个字段,您可以将返回结果映射到一组标量。如果您的 SP 返回多个字段,您可以将返回结果映射到集合或实体(如果所有字段都来自单个表)或复杂类型的集合。

    如果你想使用复杂类型,你可以点击获取列按钮来获取你的 SP 的所有列。然后单击 Create new Complex type 按钮以创建此 Complex 类型。

    4) 将域服务类添加到 Web 项目。选择您刚刚创建的 DataModel 作为此 Service 的 DataContext。选择要向客户公开的所有实体。应该为这些实体生成服务功能。

    5) 您可能在实体列表中看不到复杂类型。您必须在服务中为您的 SP 手动添加查询功能: 假设您的 SP 称为 SP1,您生成的复杂类型称为 SP1_Result。

    在您的域服务类中添加以下代码:

    public IQueryable<SP1_Result> SP1()
        {
            return this.ObjectContext.SP1().AsQueryable();            
        }
    

    现在您可以编译您的项目了。您可能会收到这样的错误:“SP1_Result 没有密钥”(如果您没有使用 RIA 服务 SP1 测试版)。如果这样做,则需要在服务元数据文件中执行以下操作:

    添加了 SP1_Result 元数据类并标记了 Key 字段:

    [MetadataTypeAttribute(typeof(SP1_Result.SP1_ResultMetadata))]
    public partial class SP1_Result
    {
        internal sealed class SP1_ResultMetadata
        {
            [Key]
            public int MyId;  // Change MyId to the ID field of your SP_Result
        }
    } 
    

    6) 编译您的解决方案。现在您已将 SP1_Result 暴露给客户端。检查生成的文件,您应该看到 SP1_Result 作为实体类生成。现在,您可以在 Silverlight 代码中访问 DomainContext.SP1Query 和 DomainContext.SP1_Results。您可以像对待任何其他 Entity(映射到表的实体)类一样对待它。

    【讨论】:

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