Publié
dimanche 21 mars 2010 21:25
par
Audrey
Dans
un de mes articles précédents, j'avais parlé des
DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et pour cela je vais utiliser une méthode qui me parait plus simple mais moins paramétrable, je vais utiliser la méthode
Include mise à disposition par Entity Framework pour récupérer explicitement les informations des autres entités ayant une relation avec l'entité requêtée à l'origine.
Dans notre exemple, nous allons de nouveau prendre les tables
Customers et
Orders de la base de données Northwind, ces deux tables sont reliées par une liaison grâce à la clé étrangère CustomerID se trouvant dans la table Orders.

Il faut créer un
ADO.NET Entity Data Model via Entity Framework avec les tables Customers et Orders, et ensuite un
DomainService, où il ne faut pas oublier de cocher la case suivante :

Cela permet de générer la création d'un fichier
metadata contenant les classes et les propriétés associées aux membres de nos entités.
Dans notre
DomainService, il faut modifier la méthode GetCustomers générée et lui ajouter la méthode
Include pour qu'elle puisse récupérer les informations concernant les commandes effectuées par le client :
public IQueryable<Customers> GetCustomers()
{
return this.ObjectContext.Customers.Include("Orders");
}Ensuite dans le fichier metadata,
généré il faut ajouter le tag
[Include] au dessus de la propriété Orders de la class CustomersMetadata sur laquelle on souhaite effectuer l'
include :
[Include]
public EntityCollection<Orders> Orders { get; set; }Et enfin, il ne reste plus qu'à faire le
DomainDataSource et le
Binding côté XAML :
<RIAControl:DomainDataSource x:Name="source" QueryName="GetCustomers" AutoLoad="True"> <RIAControl:DomainDataSource.DomainContext> <domain:NorthwindContext /> </RIAControl:DomainDataSource.DomainContext> </RIAControl:DomainDataSource> <ComboBox ItemsSource="{Binding Data,ElementName=source}" Name="cbCustomers" /><StackPanel DataContext="{Binding ElementName=cbCustomers, Path=SelectedItem}" > <RIAData:DataGrid ItemsSource="{Binding Orders}" AutoGenerateColumns="True" Name="dgOrders" /></StackPanel>Et l'on obtient le résultat suivant :

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :