我可以使用RIA服务将可序列化属性添加到实体或ComplexType中吗?或者我可以使用RIA创建一个包含EntityObject
的DTO?如果不可能,解决方法是什么?我可以使用RIA服务向我的实体添加可序列化的属性吗?
我见过How Can I Extend A Entity When Using RIA Services With Silverlight?,它处理向实体添加属性,但它是一个仅包装现有属性的无数据属性。换句话说,它不包含任何新数据。我对这个问题的长度表示歉意。
我有两个结果(一个EntityObject
从表中查询,一个ComplexObject
从一个存储过程)在我的数据层,我想在一个单一的服务呼叫一起&返回。从陈述的观点来看,它们有着千丝万缕的联系(如果没有其他的话,它们就没有意义了),做两个电话然后加入客户端是不合时宜的。但是我在获得单个结果中的两个对象时遇到了问题。
首先我试图通过添加属性为Entity
public partial class MyProcResult
{
[DataMember]
public MyEntity Foo { get; set; }
}
,并在域服务操作填充它到ComplexObject
延伸。该属性在服务器端设置,但不会被序列化 - 事实上,客户端甚至不会看到该属性!
经过一番阅读,很明显我可以通过命名我的部分类MyProcResult.shared.cs
来让客户端知道属性 - 现在客户端知道属性存在,但它仍然没有序列化。
因此,我认为RIA服务没有提供非常全面的服务合同并尝试其他方法。我的下一个尝试是创建一个DTO,其中包含我的两个对象 - 应该可以工作,对吧?
[DataContract]
public class MyContainer
{
[DataMember]
public MyProcResult Bar { get; set; }
[DataMember]
public MyEntity Foo { get; set; }
}
再说一遍,它是在序列化之前填充的。这次客户端看不到MyEntity属性。它认为MyContainer
只有MyProcResult
属性。客户端生成的代码不包含其他属性!
发生了什么事?什么是特殊的关于这些实体,阻止他们被标记为[DataMember]
或包含在DTO中时被序列化?
只是一些随机的想法:是否myEntity所从实体继承? (我看到MyContainer没有)。更重要的是,MyProcResult是否继承自ComplexObject?您是否尝试过包含属性?从msn中说明:“复杂类型成员总是基于DataContract/DataMember注释深入地进行序列化。“ – Polity
@Polity - 是的,MyEntity从”EntityObject“继承并出现在EDMX设计器上,而MyProcResult继承自”ComplexObject“,并且显示为复杂类型Model Browser窗格,你可以在我的第二个示例中看到,我只是将它们标记为DataMember,而不是复杂的类型或实体关联,我期望它们可以作为常规.NET对象序列化。 –