Моя модель Entity Framework создана из базы данных SQL Server. Поскольку мне нужен доступ к базе данных из Silverlight, я создал DomainService для RIAServices по модели EF. Продукт
является одним из автоматически созданных EntityObject
, соответствующих таблице Product
. Я пытаюсь передать пользовательский класс 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!
}
}
ИЗМЕНИТЬ:
Класс продукта
автоматически создается в 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
{
//..
}