Nhibernate -mapping文件

时间:2016-02-11 09:02:39

标签: nhibernate

    public int Id { get; set; }
    public DateTime CreatedDate { get; set; }
    public DateTime ModifiedDate { get; set; }

我注意到上面的字段在我的所有表格中都在重复。 因此,我希望为所有这些字段创建一个名为“公共抽象类AuditableEntity'”的类。 假设我想为" Product"创建一个表。额外提交" Price" 喜欢

public class Product:AuditableEntity{
public int Price { get; set; }
}

我应该如何为nhibernate创建xml映射文件。

我的数据库将是oracle。 我是nhibernate的新手 我正在做xml映射...

2 个答案:

答案 0 :(得分:1)

您可以直接在AuditableEntity xml映射中映射Product中的字段(以便 Product.hbm.xml 映射Id,{ {1}},CreatedDateModifiedDate

我在这里找到了至少一个例子:https://forum.hibernate.org/viewtopic.php?f=1&t=960519使用hibernate(Java"原始"版本的NHibernate)使用DTD导入另一个XML(包含" common&# 34;列)...但我还没有在NHibernate中测试它。嗯......不再支持了:https://nhibernate.jira.com/browse/NH-1236

答案 1 :(得分:0)

如果你正在进行xml映射,那么映射端就没有继承,因为你不会继承xml文件。

我有一个基本实体类

public abstract class EntityBase<TId>
{
    #region Properties

    public virtual TId Id { get; private set; }

    #endregion

    public override Boolean Equals(object obj)
    {
        return Equals(obj as EntityBase<TId>);
    }

    private static Boolean IsTransient(EntityBase<TId> obj)
    {
        return obj != null &&
            Equals(obj.Id, default(TId));
    }

    private System.Type GetUnproxiedType()
    {
        return GetType();
    }

    public virtual Boolean Equals(EntityBase<TId> other)
    {
        if (other == null)
            return false;

        if (ReferenceEquals(this, other))
            return true;

        if (!IsTransient(this) && !IsTransient(other) && Equals(Id, other.Id))
        {
            var otherType = other.GetUnproxiedType();
            var thisType = GetUnproxiedType();

            return thisType.IsAssignableFrom(otherType) ||
                otherType.IsAssignableFrom(thisType);
        }

        return false;
    }

    public override Int32 GetHashCode()
    {
        return Equals(Id, default(TId)) ? base.GetHashCode() : Id.GetHashCode();
    }
}

public abstract class EntityBase : EntityBase<Guid>, IStampedEntity
{
    public virtual DateTime CreateDate { get; set; }
    public virtual String CreateUser { get; set; }
    public virtual DateTime LastUpdateDate { get; set; }
    public virtual String LastUpdateUser { get; set; }
}

和基本映射类

public abstract class MapBase<T> : ClassMapping<T> where T : EntityBase
{
    protected MapBase()
    {
        Id(x => x.Id, map =>
        {
            map.Column("Id");
            map.Generator(Generators.GuidComb);
        });

        Property(x => x.CreateDate, map => map.Type(NHibernateUtil.DateTime2));
        Property(x => x.CreateUser);
        Property(x => x.LastUpdateDate, map => map.Type(NHibernateUtil.DateTime2));
        Property(x => x.LastUpdateUser);
    }
}

通过代码进行映射。

如果你是nhibernate的新手,我会转向代码映射并忘记xml映射。

相关问题