2011-06-21 111 views
2

我与功能NHibernate以下情况:流利的层次

public class Stuff 
{ 
    public Stuff() 
    { 
     Entities = new List<Entity>(); 
    } 

    public virtual int Id { get; set; } 
    public virtual IList<Entity> Entities { get; set; } 
} 

public abstract class Entity 
{ 
    public virtual int Id { get; set; } 

    public virtual string Type { get; set; } 
    public virtual Stuff Stuff { get; set; } 
} 

public class Person : Entity 
{ 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

public class Animal : Entity 
{ 
    public virtual string Species { get; set; } 
} 

然后,我有下面的代码使用自动映射,并生成这些映射:

 var sessionFactory = 
      Fluently.Configure().Database(persistenceConfigurer).Mappings(
       m => 
       m.AutoMappings.Add(
        AutoMap.Source(new Types(typeof(Entity), typeof(Person), typeof(Animal), typeof(Stuff)))) 
        .ExportTo(@"e:\")).ExposeConfiguration(BuildSchema).BuildSessionFactory(); 
然而

,发生的事情是,我得到以下异常:

---> NHibernate.MappingException:关联引用未映射的类:ConsoleApplication1.Models.Entity

,如果我做实体类非抽象但是这个作品,我想,以避免在数据库中的表,但仍维持层次概念,重新

回答

2

您需要添加自动映射这样的

AutoMap.AssemblyOf<Entity>(yourConfiguration).IgnoreBase<Entity>(); 

这不仅会忽略你的Entity基类,但你并不需要添加每个实体手动,只要每个模型从Entity继承。