2010-05-14 11 views
2

Est-ce que quelqu'un sait comment pouvons-nous cartographier automatiquement les composants dynamiques en utilisant Automating Fluent dans NHibernate?dynamique-composant fluent automapping

Je sais que nous pouvons mapper des classes normales en tant que composants, mais que nous n'avons pas réussi à comprendre comment mapper des dictionnaires en tant que composants dynamiques en utilisant un automapping fluide.

Merci

Répondre

4

Nous avons utilisé avec succès l'approche suivante (avec FluentNH 1.2.0.712):

public class SomeClass 
{ 
    public int Id { get; set; } 
    public IDictionary Properties { get; set; } 
} 

public class SomeClassMapping : ClassMap<SomeClass> 
{ 
    public SomeClassMapping() 
    { 
     Id(x => x.Id); 

     // Maps the MyEnum members to separate int columns. 
     DynamicComponent(x => x.Properties, 
         c => 
          { 
           foreach (var name in Enum.GetNames(typeof(MyEnum))) 
            c.Map<int>(name); 
          }); 
    } 
} 

Ici, nous avons cartographié tous les membres de certains Enum pour séparer les colonnes où tous elles sont de type int. En ce moment je travaille sur un scénario dans lequel nous utilisons différents types pour les colonnes dynamiques qui ressemble à ceci:

// ExtendedProperties contains custom objects with Name and Type members 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Map(prop.Name).CustomType(prop.Type); 
} 

Cela fonctionne également très bien.

Ce que je suis toujours sur le point de savoir comment utiliser References au lieu de Map pour faire référence à d'autres types qui ont leur propre cartographie ...

MISE À JOUR: L'affaire avec des références est malheureusement plus complexe , veuillez vous référer au this Google Groups thread. En bref:

// This won't work 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Reference(dict => dict[part.Name]); 
} 

// This works but is not very dynamic 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Reference<PropertyType>(dict => dict["MyProperty"]); 
} 

C'est tout pour le moment.

Questions connexes