Свободные переопределения базового класса автомата 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 - это datetime, null, а CreatedBy - это nvarchar (255).

Как я могу настроить этот AutoMapper для получения этих сопоставлений от базового класса ко всем дочерним классам?


person Krzysztof Król    schedule 01.06.2011    source источник


Ответы (1)


Вы не можете переопределить сопоставление для базового класса, поскольку это сопоставление фактически никогда не создается. Если вы хотите продолжить использование 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...
            }
        }
    }
}
person Vadim    schedule 01.06.2011