WCF RIA Services / Linq-to-SQL:包含来自外部表的属性

时间:2010-12-02 14:40:12

标签: silverlight wcf-ria-services

假设您有以下相关表格(Stores -> Categories -> Products

  • 商店
  • 分类
  • 产品

我想创建一个网格来编辑Products。 RIA服务很简单。但是,如果我还希望在StoreName列表中显示来自Stores的{​​{1}}和来自CategoryName的{​​{1}},该怎么办?两个额外的列应该只读。

如何实施?

更新:我正在尝试以最简单的形式执行此操作。这不是ViewModel,只有拖放,代码(如果有的话)将进入代码隐藏。我正在使用Ling2Sql并返回GetProducts查询的默认实现。

此致

Larsi

2 个答案:

答案 0 :(得分:0)

你是如何设置的?您是绑定到ViewModel还是仅使用后面的代码? Web服务是否发回Product LINQ对象的列表,或者您正在做其他事情吗?

有多种选择,但这实际上取决于你要做的事情。

答案 1 :(得分:0)

最简单的方法是为产品添加元数据文件注释,让网格为您生成列。

例如,您的表可能看起来像这样:

Product
    int Id; 
    string ProductName;
    int CategoryId;

Category
    int Id;
    string CategoryName;
    int StoreId;

Store
    int Id; 
    string StoreName;

现在,在创建服务时,您可以包含域模型中的3个表/实体,并让它为您生成元数据文件。在该文件中,正确地注释对象:

internal sealed class ProductMetadata
{
    [Key]
    [Bindable(false)]
    [Display(AutogenerateField=false)]
    public int Id { get; set; }

    [Bindable(true, BindingDirection.TwoWay)]
    [Display(Name="Product")]
    [StringLength(20, MinimumLength=3)]
    public string ProductName { get; set; }

    [Bindable(false)]
    [Display(AuteogenerateField=false)]
    public Category Category { get; set; }

    [Required]
    [Bindable(false)]
    [Display(AutogenerateField=false)]
    public CategoryId { get; set; }
}

您可以对其他对象的元数据执行相同的操作。

您可能需要做的另一件事是在网格中添加另外两列,并将它们映射到Product.Category.CategoryName和Product.Category.Store.StoreName