2015-10-14 286 views
0

我试图映射这个类,结构:NHibernate的映射

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

public class Parent: Entity 
{ 
    public virtual string ParentName {get;set;} 
    ... 
} 

public class Child : Parent 
{ 
    public virtual string DisplayName {get;set;} 
    ... 
} 

我按照惯例做测绘与制图混合通过这样的代码:

public class ChildMappingOverride: UnionSubclassMapping<Child> 
{ 

} 

public class NHibernateMapping 
{ 
    public void MapDomain() 
    { 
     ConventionModelMapper mapper = new ConventionModelMapper(); 
     Type baseEntityType = typeof(Entity); 
     mapper.IsEntity((t, declared) => (baseEntityType.IsAssignableFrom(t) && baseEntityType != t) && !t.IsInterface); 
     mapper.IsRootEntity((t, declared) => baseEntityType.Equals(t.BaseType)); 

     mapper.Class<Entity>(map => 
      { 
       map.Id(x => x.Id, m => m.Generator(Generators.GuidComb)); 
       map.Version(x => x.Version, m => 
       { 
        m.Column("Version"); 
        m.Generated(VersionGeneration.Never); 
        m.UnsavedValue(0); 
        m.Insert(true); 
        m.Type(new Int32Type()); 
        m.Access(Accessor.Property); 
       }); 
      }); 

     mapper.AddMapping<ChildMappingOverride>(); 
    } 
} 

好了,现在当nhibernate创建数据库模式时,我得到2个表而不是只有一个: Nhibernate创建的表:父和子。 我希望它只创建具有所有字段的表的子级:Id,Version,ParentName,DisplayName。

我该怎么做? 请帮忙

回答

0

标记父级抽象

0

找到了答案。感谢Fran Knebels 使父类抽象解决了这个问题。