Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1471 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  NHibernate mapping de Dictionary<MyClass, string>

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

NHibernate mapping de Dictionary<MyClass, string>

n°1798194
FLLM
Posté le 10-10-2008 à 11:55:09  profilanswer
 

Bonjour,  
 
J'ai une classe "mon_objet" qui me sert de clef dans un dictionnaire. Cela doit me donner une chaîne de caractère en valeur. Il faut que la partie dotnet compare les références pour savoir si les clefs sont égales.
 
J'ai aucune idée de comment implémenter le mapping nhibernate avec une clef qui n'est pas un type primitif.
 
Si vous avez des idées !
 
Merci  
 
Laurent

mood
Publicité
Posté le 10-10-2008 à 11:55:09  profilanswer
 

n°1799463
juflo
Posté le 13-10-2008 à 15:46:28  profilanswer
 

C'est quoi "mon_objet" comme classe ?
En base, la clé de ta table, c'est un ensemble de champs simples ?
Si oui, regarde les "composite-id" dans la doc.

n°1800298
FLLM
Posté le 15-10-2008 à 09:14:33  profilanswer
 

C'est une classe de mon projet. En base, je veut qu'il mettre l'ID de l'instance de "ma classe" donc "mon objet" et je veut qu'NHibernate me donne la référence dans la partie logiciel.
 
Je sais pas si je suis clair, ca ne l'ai pas forcément dans ma tête :x

n°1800575
juflo
Posté le 15-10-2008 à 16:29:42  profilanswer
 

nan, c'est pas clair ;)
Que veux-tu dire par "l'ID de l'instance de ma classe donc "mon_objet"" ?
L'objet "mon_objet " ? Si c'est le cas :
1) il faut qu'il soit sérialisable (attribut Serializable + tout ce qui dans l'objet doit l'etre aussi)
2) C'est un peu bizarre, au sens où c'est possible, mais bon, des primary key de type blob/clob (objet binaire), c'est pas super pratique ni super performant pour les requêtes.
Si vraiment ce qu'il te faut, tu pourrais faire une autre table qui aurait comme champs : ID (int), DATA (blob/clob), et ton autre objet avec comme clé cet objet coté applicatif, et un entier en base.
 
Tu peux peut etre mettre le code de ces deux classes ici, ca pourrait etre plus clair


Message édité par juflo le 15-10-2008 à 16:33:54
n°1800847
FLLM
Posté le 16-10-2008 à 09:27:28  profilanswer
 

Alors, j'ai deux classes :
 
namespace MonProjet.Domain
{
    public class MaClasse
    {
        public int ID { get; set; }
        public string Label { get; set; }
    }
}
 
Et :
 
namespace MonProjet.Domain
{
    public class Truc
    {
        public virtual IDictionary<MaClasse, string> MaClasseValues { get; set; }  
        [...]
    }
}
 
Les deux sont des classes métiers. En gros on pourrais voir MaClasse comme un critère de sélection et l'association MaClasse/string comme un critère de sélection avec une valeur particulière dans l'instance de Truc.
Les deux sont des classes métiers.
 
J'ai un hbm pour chaque. C'est le hbm de Truc que je n'arrive pas à faire. Je n'ai pas le droit de modifier la classe Truc pour ajouter du code dedans.
 
En base, j'imagine avoir une classe association MaClasseValues avec trois attributs, l'ID de Truc, l'ID de MaClasse et un attribut contenant la valeur de string. Dans la base je veut stocker les ID de mes objets et dans mon code les références des instances.
 
Merci pour ton aide et pour l'intérêt que tu portes à ma demande.


Message édité par FLLM le 16-10-2008 à 09:31:47
n°1800930
juflo
Posté le 16-10-2008 à 11:37:36  profilanswer
 

Pour MaClasseValues  dans Truc, ca va etre qqch du genre :
 
<map name="MaClasseValues" table="Table_d_association_MaClasse_Truc">
      <key column="champ_de_Truc_dans_la_table_d_association" />
      <index column="Primarey_Key_de_la_table_de_MaCLasse" type="MonProjet.Domain.MaClasse, MonProjet"/>
      <many-to-many class="System.String" column="Champ_de_label" />
 </map>

n°1801268
FLLM
Posté le 17-10-2008 à 09:31:34  profilanswer
 

Voici l'incantation NHibernate pour faire le mapping d'un dictionnaire :
 
    <map name="MaClasseValues" table="MA_CLASSE_VALUES" cascade="save-update" lazy="false">
      <key column="TRUC_ID" />
      <composite-index class="MonProjet.Domain.MaClasse, MonProjet.Domain" >
        <key-property column="MA_CLASSE_ID" name="ID"/>
      </composite-index>
      <element column="VALUE" type="string" />
    </map>
 
Un grand merci à toi juflo.

n°1802442
juflo
Posté le 20-10-2008 à 16:35:33  profilanswer
 

De rien ;)
(Ca commence à être tordu quand même !)
Néanmoins, je suis pas sur de l'utilité du composite-index, vu que tu n'as qu'une seule "key-property" (et pas de "key-value" non plus).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  NHibernate mapping de Dictionary<MyClass, string>

 

Sujets relatifs
Serialiser dans un String[Batch] Copier string de plusieurs lignes
"system(..)" et stringConvertir un String 'hexa' en hexa pur
Visual C++ express : tableau de string ?nhibernate : one-to-many
[Delphi] Conversion de types (single et string)Erreur List<String[]> et validation du code dans une JSP ?
Découper efficacement une String (parsage)(String.split,Tokenizer,etc)Lancer une méthode javascript à partir d'un string
Plus de sujets relatifs à : NHibernate mapping de Dictionary<MyClass, string>


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR