Publié dimanche 21 mars 2010 21:25 par Audrey

[RIA Services] Include et DomainDataSource

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.

FK

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 :

Metada

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 :

Resultat
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 :

# re: [RIA Services] Include et DomainDataSource @ dimanche 21 mars 2010 21:44

Bonjour Audrey,

Comment vas-tu ? :)

Deux petites questions pour toi:

Dans le cadre d'un projet MVVM (donc plus de domaindatasource dans la vue), crées tu tes DomainDataSource à la main dans le model où tu utilises direct les DataContext dans le ViewModel ?

Et deuxième question:

Là tu génères des métadatas, as-tu remarqué que si on déporte le DataModel dans une autre assembly (dans un cadre d'une architecture n-tiers par exemple), on ne peut plus générer de Metadata. Y a-t-il une alternative ? Si non, ne trouve tu pas que WCF Ria Services est anti-architecture (on revient à l’air des DataSet en 2005 lié à l’IHM).

PS : par contre attention dans ton exemple cela implique que pour le rapatriement des entités tu vas à chaque fois rapatrier les relations. Pour ma part je mets un booléan en paramètre ou je crée une méthode personnalisé.

Merci pour ton post et tes réponses

Julien.Dollon

# re: [RIA Services] Include et DomainDataSource @ dimanche 21 mars 2010 21:56

Bonjour Julien !

Pour un projet MVVM, perso je préfère utiliser les DataContext dans le ViewModel.

Et pour ta deuxième question, je te conseille ce lien : http://www.euri.com/Blog/tabid/85/EntryId/21/Using-RIA-Services-with-data-access-in-a-separate-assembly-and-namespace.aspx

Concernant ton PS, mon exemple est là pour l'exemple et montrer qu'il est possible de faire ça, après à chacun de l'utiliser à sa façon :)

Audrey

# re: [RIA Services] Include et DomainDataSource @ lundi 22 mars 2010 10:07

Ce qui est important là-dedans c'est que c'est grâce à Entity Framework que tu peux faire tout ça. Le reste est presque anecdotique Smile

Matthieu MEZIL


Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01