Я знаю, что это старая ветка, и на нее, возможно, уже ответили, но я просто наткнулся на нее, и так как никто не предоставил ссылку или лучший ответ.
В настоящее время я использую Silverlight 5, и это то, что у меня сработало (я думаю, что процесс в SL4 IIRC такой же).
При распространении свойств навигации на клиент, вам необходимо сообщить службам RIA, что где-то существует связь, использующая атрибуты [Key] и [Association], что, в отличие от структуры сущностей, просто описывает, как сопоставить связь с надлежащими объект.
Первые классы метаданных:
[MetadataTypeAttribute(typeof(Category.CategoryMetadata))]
public partial class Category
{
internal sealed class CategoryMetadata
{
private CategoryMetadata() {
}
[Key]
public int Id { get; set; }
public string NAME { get; set; }
[Association("CategoryToProducts", "Id", "CAT")]
[Include]
public EntityCollection<Product> Products { get; set; }
}
}
[MetadataTypeAttribute(typeof(Order.OrderMetadata))]
public partial class Order
{
internal sealed class OrderMetadata
{
// Metadata classes are not meant to be instantiated.
private OrderMetadata() {
}
[Key]
public int Id { get; set; }
public int PRODID { get; set; }
public DateTime DATE { get; set; }
public bool DONE { get; set; }
public int QTY { get; set; }
[Association("OrderToProduct", "PRODID", "Id", IsForeignKey = true)]
[Include]
public Product Product { get; set; }
}
}
[MetadataTypeAttribute(typeof(Product.ProductMetadata))]
public partial class Product
{
internal sealed class ProductMetadata
{
private ProductMetadata() {
}
[Key]
public int Id { get; set; }
public int CAT { get; set; }
public string NAME { get; set; }
public string DESC { get; set; }
public decimal PRICE { get; set; }
public int QTY { get; set; }
public long UPC { get; set; }
[Association("ProdToCat", "CAT", "Id", IsForeignKey = true)]
[Include]
public Category Category { get; set; }
[Association("ProductToOrders", "Id", "PRODID")]
[Include]
public EntityCollection<Order> Orders { get; set; }
}
}
Теперь нам нужно сообщить службам RIA, что мы хотим, чтобы она загрузила ассоциацию:
(Примечание: Intellisense говорит, что это список имен свойств, разделенных точками, однако я попытался что-то вроде .Include ("Category.SubCategory"), и это не удалось с исключением ... Хотя .Include ("Категория"). Include ( «Подкатегория») работала как шарм!)
public IQueryable<Product> GetProducts() {
return this.ObjectContext.Products.Include("Category");
}
Теперь я могу получить доступ к своему свойству "Category" из клиента Silverlight, и оно не равно NULL:)