RIA服务中的存储过程

时间:2009-08-12 10:24:21

标签: sql linq ria

我想用SP加载一些数据。

我将一个SP放在Linq to SQL Class中,我不知道如何使用它在数据网格中加载它的数据。 在LinqToSqlDomainService中,我无法弄清楚如何调用SP。 我应该使用哪些步骤。

这样的任何样本?所有样本都使用表格。

感谢的

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您可以使用与sproc相同的结构创建空视图,并将该存储过程映射到DomainService中的函数 请参阅http://cid-289eaf995528b9fd.skydrive.live.com/self.aspx/Public/sproc.zip

上的示例

答案 2 :(得分:2)

我在这个网站找到了以下优秀的分步指南 -

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

1)将ADO实体数据模型添加到Web项目中;选择generate from database选项;选择要连接的数据库实例。

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

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

如果要使用复杂类型,可以单击“获取列”按钮以获取SP的所有列。然后单击“创建新的复杂类型”按钮以创建此复杂类型。

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

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是作为Entity类生成的。现在,您可以在Silverlight代码中访问DomainContext.SP1Query和DomainContext.SP1_Results。您可以像处理任何其他实体(映射到表的实体)类一样对待它。

答案 3 :(得分:0)

调用存储过程非常简单。将其作为函数导入,然后将该函数作为DDS的成员调用。返回值是ObservableCollection&lt;&gt;您可以使用它来设置要绑定的对象的DataContext。

... 除非您希望通过魔术代码生成的代理在Silverlight RIA应用程序中使用它,在这种情况下,您的鹅将被烹饪,除非您的结果行与其中一个实体完全匹配。如果您可以满足该条件,请编辑DomainService类并显示一个包装ObjectContext方法的方法。