2011-08-20 4 views
2

J'utilise Fluent NHibernate (Auto Mapping) pour mapper les objets de mon domaine aux tables de base de données. J'ai créé ma propre classe 'Date' que je mappe en utilisant 'DateTranslator' - une implémentation de 'IUserType' de NHibernate.Fluid NHibernate - convention pour appliquer le type personnalisé

public class MyDomainObject : DomainObject 
{ 
    public Date Date { get; set; } 
} 

public class MyDomainObjectMappingOverride : IAutoMappingOverride<MyDomainObject> 
{ 
    public void Override(AutoMapping<MyDomainObject> mapping) 
    { 
     mapping.Map(x => x.Date).CustomType(typeof(DateTranslator)); 
    } 
} 

Comme vous pouvez le voir - j'ai créé une substitution de mappage pour cet objet de domaine afin que je puisse spécifier le type personnalisé qui doit être utilisé pour cartographier la propriété « Date ». Maintenant, cela signifie que je vais devoir créer un remplacement de mappage pour tous les objets de domaine qui contiennent une propriété de type "Date". Je voudrais utiliser une convention ici afin que 'DateTranslator' soit utilisé pour mapper toutes les propriétés de type 'Date' mais je n'ai pas réussi à le comprendre.

Toute aide avec ceci serait grandement appréciée.

Répondre

2
public class MyUsertypeConvention : IPropertyConvention 
{ 
    public void Apply(IPropertyInstance instance) 
    { 
     if (instance.Type.Name == "Date") 
     //or 
     //if (instance.Type.GetUnderlyingSystemType() == typeof(Date)) 
      instance.CustomType<DateTranslator>(); 
    } 
} 

et config par exemple

FluentMappings.Conventions.Add(new MyUsertypeConvention()) 
+1

ne fonctionnera pas si une propriété que vous essayez d'appliquer le type personnalisé à est considéré comme une référence par défaut. –

+1

alors vous avez oublié d'exclure le type personnalisé de l'automapping. 'override bool ShouldMap (t) {Renvoie t! = typeof (Date) && base.ShouldMap (t); } ' – Firo

+0

J'ai aussi des problèmes avec ça. Il semble que ShouldMap (type Type) n'est jamais appelé pour ma propriété qui a un type primitif personnalisé, mais il ne frappe pas non plus mon IPropertyConvention. Quelque chose d'évident que j'ai peut-être manqué? – DavGarcia

Questions connexes