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.