无法通过RIA服务访问EntityObject类型

Nem*_*emo 6 .net c# silverlight ria entity-framework

我的实体框架模型是从SQL Server数据库生成的.由于我需要从Silverlight访问数据库,因此我针对EF模型为RIAServices生成了一个DomainService.ProductEntityObject表中对应的自动生成之一Product.我试图将自定义类传递CompositeData给Silverlight客户端,如图所示.问题是CurrentProduct客户端无法访问该字段,但可以访问其他字符串/ int字段.如何CurrentProduct从客户端访问?

public class CompositeData
{
    [Key]
    public Guid PKey { get; set; }
    public string CompositeName { get; set; } 
    public string Identity { get; set; }
    public Product CurrentProduct { get; set; }  //Product is an auto-generated EntityObject class

    public CompositeData()
    {
        PKey = Guid.NewGuid();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是域服务方法:

[EnableClientAccess()]
public class LocalDomainService : DomainService
{
   public IEnumerable<CompositeData> GetData()
   {
       List<CompositeData> listData = new List<CompositeData>();
       //...
       return listData;
   }
}
Run Code Online (Sandbox Code Playgroud)

从Silverlight客户端,

    domService.Load(domService.GetDataQuery(), GetDataCompleted, null);

    private void GetDataCompleted(LoadOperation<CompositeData> compData)
    {
        foreach(CompositeData cdItem in compData.Entities)
        {
            // cdItem.CompositeName is accessible
            // cdItem.CurrentProduct is not accessible!
        }                     
    }
Run Code Online (Sandbox Code Playgroud)

编辑: Product类在Model1.Designer.cs中自动生成

    [EdmEntityTypeAttribute(NamespaceName="MyDBModel", Name="Product")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class Product : EntityObject
    {
        //..
    }
Run Code Online (Sandbox Code Playgroud)

它也在客户端项目中生成(在SilverlightProject.g.cs中)

    /// <summary>
    /// The 'Product' entity class.
    /// </summary>
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/SilverlightProject")]
    public sealed partial class Product : Entity
    {
       //..
    }
Run Code Online (Sandbox Code Playgroud)

Zab*_*sky 1

您可以使用和属性来定义CompositeData和之间的关系。ProductIncludeAssociation

[System.ServiceModel.DomainServices.Server.Include]
[System.ComponentModel.DataAnnotations.Association("AssociationName", "MainKey", "AssociatedObjectKey")]
public Product CurrentProduct { get; set; }
Run Code Online (Sandbox Code Playgroud)