2010-11-13 52 views
1

J'essaie d'obtenir une relation de plusieurs à travailler dans RIA/Silverlight, mais je n'arrive pas à comprendre comment.Silverlight RIA beaucoup à beaucoup ne fonctionne pas

Ma base de données ressemble à ceci ...

Stores  Parts  StoreParts 
-------- ------- ---------- 
ID   ID   StoreID 
StoreName PartName PartID 

créer un Entity Data Model sur cette base de données.

Mon XAML ressemble à ceci

<toolkit:Accordion Background="White" BorderThickness="1" Height="503" HorizontalAlignment="Left" Margin="207,32,0,0" Name="accordion2" SelectionMode="ZeroOrMore" VerticalAlignment="Top" Width="181"> 
    <toolkit:Accordion.ContentTemplate> 
     <DataTemplate> 
      <ListBox BorderThickness="0" ItemsSource="{Binding Parts}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding PartName}" /> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </DataTemplate> 
    </toolkit:Accordion.ContentTemplate> 
    <toolkit:Accordion.Effect> 
     <DropShadowEffect BlurRadius="8" /> 
    </toolkit:Accordion.Effect> 
    <toolkit:Accordion.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding StoreName}" /> 
      </StackPanel> 
     </DataTemplate> 
    </toolkit:Accordion.ItemTemplate> 
</toolkit:Accordion> 

Mon code XAML derrière:

StoreContext storeContext = new StoreContext(); 
accordion2.ItemsSource = storeContext.Stores; 
storeContext.Load(storeContext.GetStoresQuery()); 

Mon RIA DomainService:

[EnableClientAccess()] 
public class StoreService : LinqToEntitiesDomainService<MenuTemp2Entities> 
{ 
    public IQueryable<Store> GetStores() 
    { 
     return this.ObjectContext.Stores.Include("Parts"); 
    } 
} 

Et, enfin, mes métadonnées RIA

[MetadataTypeAttribute(typeof(Store.StoreMetadata))] 
public partial class Store 
{ 
    internal sealed class StoreMetadata 
    { 
     // Metadata classes are not meant to be instantiated. 
     private StoreMetadata() 
     { 
     } 

     public int ID { get; set; } 

     [Include] 
     [Association("StoreParts", "ID", "ID")] 
     public EntityCollection<Part> Parts { get; set; } 

     public string StoreName { get; set; } 
    } 
} 

Le nom de magasin arrive bien, mais il semble qu'il n'assigne pas les pièces en tant que sous-table au magasin. Il retourne seulement 1 partie par magasin dans l'ordre où ils sont stockés dans la table des pièces. Il ne semble pas utiliser la relation StoreParts du tout.

Des idées?

+0

Avez-vous déclaré les métadonnées pour 'Part'? De plus, je pense qu'il y a d'autres problèmes avec votre classe de métadonnées - j'ai fait quelque chose de similaire moi-même, mais le code est au travail, donc je ne peux pas vérifier et je préfère ne pas vous donner de fausses informations. – ChrisF

+0

Les métadonnées sont ce qui a été généré automatiquement par Visual Studio, sauf lorsque j'ai ajouté les balises [Include] et [Association]. Même si j'ai créé des métadonnées pour Part, où dois-je dire à Part pour utiliser les métadonnées? – Scottie

Répondre