C# Silverlight 4 RIA服务、Silverlight 4工具包控件和数据库中的多对多关系

C# Silverlight 4 RIA服务、Silverlight 4工具包控件和数据库中的多对多关系,c#,.net,many-to-many,wcf-ria-services,silverlight-toolkit,C#,.net,Many To Many,Wcf Ria Services,Silverlight Toolkit,我已经看了很长一段时间的片段和教程,但我找不到完整的答案——只是一些零碎的东西 我有一个包含3个表的数据库: 产品: id唯一标识符 namenvarchar(50) 类别: id唯一标识符 namenvarchar(50) 产品类别: fk_产品唯一标识符 fk_类别唯一标识符 显然,这涉及到多对多关系——一个产品可以有多个类别,一个类别可以应用于多个产品 下一步是从数据库生成ADO.NET模型和域服务。这非常简单,我认为是标准的 现在在视图中,我使用了Silverlight 4工

我已经看了很长一段时间的片段和教程,但我找不到完整的答案——只是一些零碎的东西

我有一个包含3个表的数据库:

产品:

  • id唯一标识符
  • namenvarchar(50)
类别:

  • id唯一标识符
  • namenvarchar(50)
产品类别:

  • fk_产品唯一标识符
  • fk_类别唯一标识符
显然,这涉及到多对多关系——一个产品可以有多个类别,一个类别可以应用于多个产品

下一步是从数据库生成ADO.NET模型和域服务。这非常简单,我认为是标准的

现在在视图中,我使用了Silverlight 4工具包提供的DataGrid和DataForm

<toolkit:DataForm ItemsSource="{Binding Data, ElementName=ProductsSource}" Name="dataForm1" AutoCommit="True" />


数据源ProductsSource的定义如下:

<riaControls:DomainDataSource Name="ProductsSource" QueryName="GetProductsQuery" AutoLoad="True">
        <riaControls:DomainDataSource.SortDescriptors>
            <riaControls:SortDescriptor Direction="Ascending" PropertyPath="title" />
        </riaControls:DomainDataSource.SortDescriptors>
        <riaControls:DomainDataSource.DomainContext>
            <domain:PortfolioDomainContext />
        </riaControls:DomainDataSource.DomainContext>
    </riaControls:DomainDataSource>


现在:在视图中呈现这种多对多关系中的数据的最佳方式是什么?是否有一种方法可以在数据表单中为具有多对多关联关系的属性显示一个启用多选功能的列表框?

这可能与

显然,RIA服务中不支持多对多(EF模型删除关联表)

您需要包括关联表。我认为只有在EF模型中包含任何额外字段(除了2个外键之外),或者您打破了其中一个关联并自己管理多对多关系的一侧时,关联表才会包含在EF模型中

<riaControls:DomainDataSource Name="ProductsSource" QueryName="GetProductsQuery" AutoLoad="True">
        <riaControls:DomainDataSource.SortDescriptors>
            <riaControls:SortDescriptor Direction="Ascending" PropertyPath="title" />
        </riaControls:DomainDataSource.SortDescriptors>
        <riaControls:DomainDataSource.DomainContext>
            <domain:PortfolioDomainContext />
        </riaControls:DomainDataSource.DomainContext>
    </riaControls:DomainDataSource>