2009-11-27 4 views
2

Je viens de commencer à utiliser Fluent NHibernate et se sont heurtées au problème suivant en essayant de Automap mes entités:Comment faire pour que NHibernate automatise automatiquement une classe héritant d'une classe abstraite héritant d'une interface?

public interface IDataEntity {} 

public abstract class PhysicalEntity : IDataEntity { 

     public virtual int Id { get; set; } 
     public virtual string Name { get; set; } 
} 

public class Mine : PhysicalEntity { 

     public virtual string MineString { get; set; } 
} 

private static ISessionFactory CreateSessionFactory() 
     { 
      return Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008 
       .ConnectionString(c => c.FromConnectionStringWithKey("CSMID_FNH"))) 
       .Mappings(m => 
       m.AutoMappings.Add(
       AutoMap.AssemblyOf<Mine>() 
       .Where(t => t.Namespace == "DAL.DomainModel" && t.IsClass && !t.Name.EndsWith("Attribute")) 
       .IgnoreBase<PhysicalEntity>())) 
       .ExposeConfiguration(BuildSchema) 
       .BuildSessionFactory(); 
     } 

Maintenant, si je supprime la référence à l'interface IDataEntity, les travaux de AutoMapping. J'ai essayé d'insérer un champ d'identification dans l'interface, mais cela entraîne une erreur d'exécution de NHibernate, tout comme indiquer à la carte automatique d'ignorer le type IDataEntity. Qu'est-ce que j'oublie ici? J'aimerais vraiment que toutes les classes de mon domaine héritent de IDataEntity.

Répondre

2

Ok, donc je pense avoir une réponse.

Tout ce que je devais faire était modifier mon IDataEntity comme ceci:

interface publique IDataEntity {int Id {get; } }

J'avais essayé ceci à l'origine avec un get et un ensemble, mais alors j'aurais des problèmes parce que ma classe abstraite a utilisé un ensemble protégé et n'a pas pu hériter de l'interface. Laisser le setter hors de l'interface semble fonctionner pour l'instant, j'espère qu'il ne présente pas d'autres problèmes.

Questions connexes