2009-05-28 9 views
2

Celui-ci me gratte la tête, alors j'espère qu'une seconde paire d'yeux peut m'aider ici.Fluent NHibernate Automapping error

Configuration:

J'ai une classe de base appelée DomainEntity que tout mon transfert de données utilisent des objets. Il ne définit essentiellement qu'une propriété appelée Id (qui est un entier).

J'ai des objets de transfert de got données: Blog, Post, l'utilisateur DomainEntity est dans l'espace de noms Core.Domain, les objets de transfert de données sont sous Core.Domain.Model

J'ai le constructeur de la session suivante Code:

return Fluently.Configure() 
    .Database(SQLiteConfiguration.Standard.UsingFile("c:\blog.db")) 
    .Mappings(x => x.AutoMappings.Add(
     AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>() 
      .Where(type => 
       type.Namespace.EndsWith("Domain.Model") && 
       !type.IsAbstract && 
       type.IsClass && 
       type.GetProperty("Id") != null)  
    )).BuildSessionFactory(); 

Lorsque je tente de tester une simple requête, je reçois une exception d'application sur le code ci-dessus (quelque part) et le message d'erreur est:

System.Applicat ionException: Erreur tout en essayant de construire le Mapping document pour 'Core.Domain.DomainEntity' ---> NHibernate.MappingException: Impossible compiler le document de mapping: (XmlDocument) ---> System.IndexOutOfRangeException : L'index était en dehors des limites du tableau.

Il semble que mon code/NHibernate tente de mapper DomainEntity, mais échoue. Je pensais que mon code ci-dessus explicitement déclaré pas pour mapper cet objet en utilisant le type.Namespace.EndsWith ("Domain.Model"). Est-ce exact? Où suis-je égaré ici?

Merci pour toute aide.

Répondre

3

On dirait que j'ai oublié la ligne suivante:

.WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity)) 

Ainsi, dans son intégralité, mon nouveau code AutoMapping ressemble à ceci:

return Fluently.Configure() 
       .Database(SQLiteConfiguration.Standard.UsingFile("c:\\blog.db")) 
       .Mappings(x => x.AutoMappings.Add(
        AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>() 
         .WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity)) 
         .Where(type => 
          type.Namespace.EndsWith("Domain.Model") && 
          !type.IsAbstract && 
          type.IsClass && 
          type.GetProperty("Id") != null) 
        )).BuildSessionFactory(); 

Cela semble avoir effacé mon erreur jusqu'à.