c# - Fluent NHibernate 自动映射基类覆盖

标签 c# .net nhibernate fluent-nhibernate automapping

我有以下基类。

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 是日期时间、null,CreatedBy 是 nvarchar(255)。

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

最佳答案

您无法覆盖基类的映射,因为该映射实际上从未被创建。如果您想继续使用 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...
            }
        }
    }
}

关于c# - Fluent NHibernate 自动映射基类覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201518/

相关文章:

c# - 尝试将递归 JavaScript 方法移植到 C#,这种方法有意义吗?

c# - 在不修改类(或了解实现细节)的情况下扩展类的模式 (c#)

c# - 为什么类中定义的委托(delegate)不能被类对象访问

session 关闭时的 NHibernate 事务管理

c# - NHibernate 关系存在双向获取数据的问题

c# - 有条件地添加限制

c# - 对列进行排序需要 IComparable

c# - 处理套接字/完成两次的问题?

c# - Array.Copy 只有一维吗?

c# - 如何将 AvalonDock Anchorable Pane 选项卡移动到顶部而不是底部?