无法通过RIA服务访问EntityObject类型
本文关键字:访问 EntityObject 类型 服务 RIA | 更新日期: 2023-09-27 18:21:15
My Entity Framework模型是从SQL Server数据库生成的。由于我需要从Silverlight访问数据库,所以我针对EF模型为RIAServices生成了一个DomainService。CCD_ 1是与表CCD_ 3相对应的自动生成的CCD_。我正试图将自定义类CompositeData
传递到Silverlight客户端,如图所示。问题是CurrentProduct
字段在客户端中不可访问,但其他string/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();
}
}
以下是域服务方法:
[EnableClientAccess()]
public class LocalDomainService : DomainService
{
public IEnumerable<CompositeData> GetData()
{
List<CompositeData> listData = new List<CompositeData>();
//...
return listData;
}
}
从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!
}
}
编辑:Product
类在Model1.Designer.cs 中自动生成
[EdmEntityTypeAttribute(NamespaceName="MyDBModel", Name="Product")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Product : EntityObject
{
//..
}
它也在客户端项目中生成(在SilverlightProject.g.cs中)
/// <summary>
/// The 'Product' entity class.
/// </summary>
[DataContract(Namespace="http://schemas.datacontract.org/2004/07/SilverlightProject")]
public sealed partial class Product : Entity
{
//..
}
您可以使用Product
0和Association
属性定义CompositeData
和Product
之间的关系。
[System.ServiceModel.DomainServices.Server.Include]
[System.ComponentModel.DataAnnotations.Association("AssociationName", "MainKey", "AssociatedObjectKey")]
public Product CurrentProduct { get; set; }
(抱歉我英语不好)
您还需要在DomainService类中公开Product
实体,以便能够在silverlight侧看到它:
public IEnumerable<Product> GetProduct()
{
//...
return listProduct;
}
以下是我为RIA Silverlight项目快速添加表所做的操作。这假设我已经有一个现有的ADO.NET实体数据模型、DomainService.cs和DomainService.metadata.cs
- 我更新我的数据模型
- 生成项目
- 添加一个全新的域服务类和名称与您现有的不同
- 当您的新域服务提出要求时,只将新表添加到该服务中。这应该同时生成一个新的domainservice.cs和domainservice.metadata.cs,其中包含新表的信息
- 从新的域服务中复制出自动生成的代码,并将其放入您现有的域服务,并删除您刚刚创建的域服务
- 对元数据执行同样的操作
- 构建项目,然后完成
可以通过定义ExternalReferenceAttribute和AssociationAttribute属性您的CurrentProduct属性。
[System.ServiceModel.DomainServices.ExternalReference]
[System.ComponentModel.DataAnnotations.Association("AssociationName", "MainKey", "AssociatedObjectKey")]
public Product CurrentProduct { get; set; }
只需将Include属性替换为ExternalReference属性。