Yukon permet de définir des UDT (User Defined Types / types définis par
l'utilisateur). C'est à dire d'enrichier T-SQL (integer, varchar, etc...) avec
des types définis par nos soins. Et si ces types viennent de nos programmes
écrit pour .NET (C#, VB.NET, ...) on obtient une base de donnée orientée
objet ! Mais n'allons pas trop vite ...
Le CLR (Common Language Runtime) est l'ensemble des types définis dans le noyau
.NET. C'est sa machine virtuelle si vous préferez (bien que .NET soit JITé et
pas interprété). C'est cette même CLR qui a été intégrée dans Yukon pour
permettre une interaction optimale avec les programmes .NET.
Vous pouvez importer vos classes, c'est à dire utiliser vos classes comme types
de bases pour vos tables. Cela signifie que, moyennant quelques contraintes,
Yukon réalisera tout seul le mapping .NET / BD-R.
Votre classe doit être Sérializable et avoir l'attribut SqlUserDefinedType :
[Serializable]
[SqlUserDefinedType (Format.Native)]
public class MaClasse {...}
Pour que votre classe puisse-t-être null, elle doit implémenter l'interface
INullable (soit un getter) :
[Serializable]
[SqlUserDefinedType (Format.Native)]
public class MaClasse : INullable {...}
Votre classe doit pouvoir être transformée en string, et réciproquement (les 2
opérations ne doivent pas être opposées, mais c'est recommandé) :
public static MaClasse Parse(SqlString s) {...}
public override string ToString() {...}
Votre classe doit avoir un constructeur par defaut sans paramètre :
public MaClasse() {...}
Dans Yukon, vous devez importer votre Assembly (DLL ou EXE contenant la classe)
dans un schéma. Ensuite, il faut aliaser la classe avec un nom interne à Yukon.
CREATE ASSEMBLY YukonCLR FROM 'C:\Projects\Yukon\UDTs\Point\YukonCLR.dll'
CREATE TYPE Point EXTERNAL NAME YukonCLR:Point
Dans Yukon, vous pouvez desormais utiliser le type .NET comme un type primaire :
CREATE TABLE Points
(
PointID int NOT NULL,
Pnt Point NOT NULL
)
Dans .NET, vous pourrez (dans vos appels de procédure stockée ou si vous
utilisez un prepared statement) ajouter un paramètre de type UserDefined qui
sera une instance de votre classe.
Vous pourrez aussi dans Yukon appeler une méthode ou accéder une propriété en
utilisant la syntaxe suivante :
Propriété: <implemented_type>::<property_name> = <scalar_expression>
Méthode: <implemented_type>::<method_name>([arguments])
SELECT Pnt::X AS XValue, Pnt::Y AS YValue FROM Points
On peut la résumer à "remplacer les . par des ::".
Source :
Managed UDTs Let You Extend the SQL Server Type System
Oui, SQL Server Yukon vous permet d'avoir des objets dans votre base, de ne plus
écrire à la main ou avec un outil des invériables INSERT et UPDATE. Mais
non, Yukon n'est pas un SDBGOO, car il réalise le mapping Objet-Relationnel.
Mais ne dénigrons pas les progrès effectués ni les bénéfices réalisés par
l'inclusion de la CLR dans Yukon.
Si vous avez des remarques concernant cet article ((im)précisions, remarques,
...) faites moi signe !!
retour à l'index
Monsieur Laurent ELLERBACH, responsable relation études supérieures chez
Microsoft France, pour ses idées et son soutien logistique.
Monsieur Pierre-Louis XECH, responsable relation recherche chez Microsoft
France.
Monsieur Philippe SALVAN, professeur à l'ESSI pour son interrêt et ses cours sur
les Bases de données Orientées Objet (motif de cet article).
retour à l'index