Il semble que je suis incapable de trouver des réponses à la question "comment utiliser l'approche EAV avec les outils ORM", alors je vais tenter ma chance ici.Comment stocker des métadonnées extensibles de manière ORM dans .NET?
Supposons que j'ai un Entities
Tableau:
ID -> int
Name -> nvarchar(50)
Un Images
Tableau:
EntityID -> int
Width -> int
Height -> int
Et Songs
Tableau:
EntityID -> int
Duration -> decimal(12,3)
Je dois ajouter des métadonnées extensibles aux entités (paires clé-valeur inconnues avec info de type), de sorte que je suis un ble d'émettre des requêtes telles que:
Me trouver tous les morceaux qui ont un Duration
plus de 3 minutes, avec un Name
commençant par « La », avec des métadonnées conformes à ces critères:
HasGuitarSolo
est à trueGuitarSoloDuration
est supérieur à 30 secondes
et trier les résultats sur GuitarSoloDuration
par ordre décroissant.
Je ne veux pas créer HasGuitarSolo
, GuitarSoloDuration
, etc. colonnes dans la base de données, idéalement, je voudrais les stocker dans un schéma semblable à EAV, ou un autre schéma qui ne nécessite pas une connaissance des clés à l'avant.
Voici comment cela pourrait être fait en SQL. Je cherche spécifiquement une manière ORM-amicale. Casting ne semble pas très sympathique ni pour SQL ni pour les mappeurs O/R. Merci d'avoir essayé d'aider. –
@Marcin Seredynski: Où stocker les données alors? – sv88erik
@ sv88erik: par "fait en SQL", j'avais écrit des requêtes à la main, n'ayant pas de moteur de base de données spécifique en tête (si c'est ce que vous vouliez dire). Les données doivent être stockées dans une base de données relationnelle. L'accès aux données ne devrait pas nécessiter de casting côté serveur. Idéalement, il devrait être possible de stocker les types CLR appropriés dans les types de colonne SQL appropriés. –