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映射...
答案 0 :(得分:1)
您可以直接在AuditableEntity
xml映射中映射Product
中的字段(以便 Product.hbm.xml 映射Id
,{ {1}},CreatedDate
,ModifiedDate
)
我在这里找到了至少一个例子: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映射。