Accueil

Vue Oracle dans Entity Framework 5

by Jean-Camille Mercier 27. mai 2013 17:30

S'interfacer avec des anciens systèmes est toujours un challenge, cette fois c'est sur un progiciel de gestion hospitalière que je dois récupérer des données. Il n'est pas si vieux que ça, il utilise une base de données relationnelles en Oracle 9i ... Je vais donc décrire dans ce post comment faire pour lier des tables SQL Server 2010 avec des vues en Oracle le tout englobé par Entity Framework 5 en 3 temps : 

  1. Lier le serveur Oracle à SQL Server
  2. Créer des vues Oracles
  3. Créer des clés étrangères fictives avec EF 5

 

 1ière étape : Accès au serveur Oracle

Tout commence par l'installation du provider Oracle sur la machine hébergeant votre SQL Server. En effet, l'idée est que le SQL Server retranscrive les opérations demandés vers Oracle, il faut donc lui apprendre son langage. Le driver d'accès aux données Oracle, le "ODAC", est disponible en téléchargement sur leur site : 

64-bit ODAC 11.2 Release 5 (11.2.0.3.20) for Windows x64 

Une fois installé, il est possible d'inscrire le serveur Oracle en tant que serveur lié à SQL Serveur. Soit avec le designer

Soit tout simplement en script :

-- Création du serveur lié
EXEC sp_addlinkedserver 
	@server= 'SRV_V9',
	@srvproduct= 'Oracle', 
	@provider= 'OraOLEDB.Oracle',
	@datasrc= 'SERVEUR:1521/YVELDP',
	@catalog= 'DB_V9'

Ensuite il faut que le user que vous utilisez pour connecter votre Entity Framework à la base SQL ait les droits d'accès au serveur Oracle car c'est par lui que vont être envoyé les commandes SQL. Pour cela il faut créer un nouveau login sur le serveur lié en passant le user de la base SQL (ici OpyDataAccess) et le couple login/mdp d'Oracle comme ceci :

-- Donner les droits de l'utilisateur vers V9
EXEC sp_addlinkedsrvlogin 
	@rmtsrvname = 'SRV_V9', 
	@locallogin = 'OpyDataAccess', 
	@useself = 'False', 
	@rmtuser = 'LOGIN', 
	@rmtpassword = 'MOTDEPASSE'

 

 2ième étape : Créer les vues

Maintenant que nous sommes lié au serveur Oracle, il suffit simplement de faire des vues dans SQL pour que Entity Framework puisse les lire très facilement. Je vous conseil d'en profiter pour renommer correctement la vue ainsi que les champs qui sont souvent illisible sur les anciens systèmes. Renommer permet aussi une "abstraction" de la vue sur la vieille table si vous souhaitez vous plugger plus tard sur un autre système. La création de la vue ne pose pas de problème en soit, il faut juste trouver la bonne syntaxe sur le FROM : 

SERVER_LIE..SCHEMA.TABLE

 

 3ième étape : Entity Framework

A ce niveau, fini le travail de DBA, revenons sur Visual Studio pour injecter les tables et les vues dans notre EDMX. Premier réflexe à avoir : vérifier que les clefs primaires des vues sont bien placées, il arrive qu'EF en prenne pas la bonne colonne. Ensuite il très aisé de rajouter une association entre une vue Oracle et une table SQL : il suffit d'utiliser l'outil "Association" de la boite à outil de l'Edmx et glisser de la vue (ici Client) vers la table portant la foreign key (Facture), puis renseigner l'association :

Bien que cette clé étrangère soit fictive, elle va nous permettre de lazy-loader les éléments des vues directement depuis nos objets de table ! Elle ne garantie en rien l'unicité de la relation.

Bien entendu vous pouvez donc charger les données de votre vue comme n'importe quelle table de votre modèle

Simple, efficace

 

Source : mssqltips.com & ideaexcursion.com