将父子数据绑定到Silverlight 4的ria服务中的DataGrid

时间:2010-09-26 20:29:32

标签: data-binding silverlight-4.0 service ria

我开始学习Silverlight 4 RIA服务。我已经浏览了很多关于如何将数据绑定到网格的示例。但总是有绑定的对象是一个没有子表的简单对象。

在我的数据库中有一个员工表和一个城市名表(id字段为pk)。在employee表中,有一个FK到CityId字段。

我尝试做的第一件事就是显示员工名单和他们的城市名称。 我已经按照所有教程中显示的正常方式完成了(创建edmx,创建域服务并使用数据源窗口创建数据网格)

当我尝试绑定城市名称时,问题开始在员工(父实体)和城市类型(子实体)之间抛出FK

这条线很好用:

<sdk:DataGridTextColumn x:Name="cityCodeColumn" Binding="{Binding Path=CityCode}" Header="CityCode" Width="SizeToHeader" />

这一行没有:

<sdk:DataGridTextColumn x:Name="cityNameColumn" Binding="{Binding Path=CityType.Name}" Header="CityName" Width="SizeToHeader" />

在阅读了一些之后,我意识到域服务不仅仅传递LINQ命令选择的实体的数据,并且不传递子实体信息。 除非使用include属性。

所以我的问题是,是否存在构建Silverlight应用程序的模式,并且不包括实体之间的所有关联?

感谢, 奥伦

1 个答案:

答案 0 :(得分:0)

要在绑定Employee记录时提供City信息,您需要确保使用RIA域服务元数据中的[Include]属性标记City引用。

  [MetadataTypeAttribute(typeof(MyTestObject.MyTestObject_Metadata))]
  public partial class MyTestObject
  {

    internal sealed class MyTestObject_Metadata
    {
      // Metadata classes are not meant to be instantiated.
      private MyTestObject_Metadata()
      { }

      [Include]
      public AnotherObject Foo { get; set; }
    }
}

您还需要在查询中包含引用。

var results = this.ObjectContext.MyTestObject.Include(Foo);

希望这有帮助。