我正在使用RIA服务与Silverlight和实体框架。我想调用存储过程并将结果映射到数据网格。做这个的最好方式是什么?存储过程的输出不映射到任何表设计。RIA服务 - 调用存储过程
我发现下面的文章 -
但是,它并没有为我工作 - 我得到一个错误说,结果一套复杂没有定义主键。我看不出如何在代码中定义它。
无论如何,我愿意接受任何解决方案。
我正在使用RIA服务与Silverlight和实体框架。我想调用存储过程并将结果映射到数据网格。做这个的最好方式是什么?存储过程的输出不映射到任何表设计。RIA服务 - 调用存储过程
我发现下面的文章 -
但是,它并没有为我工作 - 我得到一个错误说,结果一套复杂没有定义主键。我看不出如何在代码中定义它。
无论如何,我愿意接受任何解决方案。
我发现在这个网站如下优良一步一步的指导 -
http://betaforums.silverlight.net/forums/p/218383/521023.aspx
1)添加一个ADO实体数据模型到您的Web项目;选择从数据库选项生成;选择要连接的数据库实例。
2)选择您的数据库对象导入到模型。您可以展开“表格”节点以选择要导入到模型的任何表格。展开存储过程节点以选择您的存储过程。单击完成以完成导入。
3)右键单击数据库模型设计器以选择添加/功能导入。给函数一个名字(和SP相同的名字就可以),然后选择你想要映射的存储过程。如果您的SP只返回一个字段,则可以将返回结果映射到一组标量。如果SP返回多个字段,则可以将返回结果映射到集合或实体(如果所有字段来自单个表)或复杂类型的集合。
如果您想使用复杂类型,您可以单击获取列按钮来获取您的SP的所有列。然后点击创建新的复杂类型按钮来创建这个复杂类型。
4)将域服务类添加到Web项目。选择您刚创建的DataModel作为此服务的DataContext。选择你想要暴露给客户的所有entitis。应为这些实体生成服务功能。
5)您可能看不到实体列表中的复杂类型。您必须在您的服务中为您的SP手工添加查询功能: 假设您的SP称为SP1,则您生成的复杂类型称为SP1_Result。
添加以下代码在你的域服务类:
public IQueryable<SP1_Result> SP1()
{
return this.ObjectContext.SP1().AsQueryable();
}
现在你可以编译您的项目。你可能会得到这样的错误:“SP1_Result没有密钥”(如果你不在RIA服务SP1测试版)。如果你这样做,你需要做以下的服务元数据文件:
增加了SP1_Result元数据类和标签的关键领域:
[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。你可以像对待任何其他实体(映射到表的实体)类一样对待它。
嗯,我想出了如何去做,虽然有点麻烦。您需要为域元数据文件中的结果集创建元数据类。之后,RIA将基本上像对待实体一样对待它。
全部细节可以在这里找到 - http://leeontech.wordpress.com/2010/05/24/ria-services-and-storedprocedures/
更改生成的文件看起来像疯了一样。你在[重点] – alerya 2013-02-21 07:51:25