我现在有这个问题2个月了
如何使用RIA存储过程。
我正在使用LinqToSql并且正常工作。
我在设计师中创建了一个类并将其映射到SP。
现在在EF中,我看到了这个ComplexTypes,我导入了儿子SP,结果是ComplexTypes。
但是在DomainDataSource中没有出现。
行。
但我该如何使用它们?
我只需要检索一些数据。
我已尝试过所有解决方案(List,IList等),但我得到了
无法将类型为“System.Data.Metadata.Edm.ComplexType”的对象强制转换为“System.Data.Metadata.Edm.EntityType”。 BusinessApplication2
有任何解决方案吗?
答案 0 :(得分:1)
存储过程的问题是RIA服务工具无法“看到”存储过程将返回哪些列。
因此,有很多代码丢失,否则将会生成。
不是您正在寻找的答案,但解决方案是不使用存储过程。
答案 1 :(得分:0)
我在这个网站找到了以下优秀的分步指南 -
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。您可以像处理任何其他实体(映射到表的实体)类一样对待它。