2011-06-01 56 views
3

我有以下基类。流利的NHibernate的自动映射基类覆盖

public abstract class BaseEntity 
{ 
    public virtual long Id { get; set; } 
    public virtual DateTime CreateDate { get; set; } 
    public virtual DateTime? UpdateDate { get; set; } 
    public virtual bool IsDeleted { get; set; } 
    public virtual string CreatedBy { get; set; } 
} 

它是所有实体的基类。

例如,

public class Task : BaseEntity 
{ 
    public virtual string Name {get;set;} 
} 

我有一个初始化,

public class Initializer 
{ 
    public static AutoPersistenceModel MapEntities() 
    { 
     var p = AutoMap 
      .AssemblyOf<User>(new MyDefaultAutomappingConfiguration()) 
      .IgnoreBase<BaseEntity>() 
      .UseOverridesFromAssemblyOf<Initializer>() 
      .Override<BaseEntity>(map => 
      { 
       map.Map(b => b.CreateDate).Not.Nullable().Not.Update(); 
       map.Map(b => b.CreatedBy).Not.Nullable().Length(100); 
       map.Map(b => b.ModifiedBy).Length(100); 
       map.Map(b => b.DeletedBy).Length(100); 
       map.Map(b => b.IsDeleted).Not.Nullable().Default("0"); 
      }); 
     return p; 
    } 
} 

当然在数据库中,并且 - CREATEDATE是日期时间,空值和CreatedBy数据类型为nvarchar(255)。

如何配置此AutoMapper以获取从基类到所有子类的映射?

回答

3

由于该映射实际上并未创建,因此无法覆盖基类的映射。如果你想继续使用Automapper,你可以创建一个约定

public class BaseEntityPropertiesConvention : IPropertyConvention 
{ 
    public void Apply(IPropertyInstance instance) 
    { 
     if (instance.EntityType.IsSubclassOf(typeof(BaseEntity))) 
     { 
      switch instance.Name 
      { 
       case "CreatedDate": 
        instance.Not.Nullable().Not.Update(); 
        break; 
       case "CreatedBy": 
        instance.Not.Nullable().Length(100); 
        break; 
       //etc... 
      } 
     } 
    } 
} 
+0

它的工作原理。谢谢 :) – 2011-06-02 09:29:00