nhibernate - NHibernate 中是否有 @MappingSupperclass 等价物
问题描述
我最近以 NHibernate 作为 orm 启动了 Asp Net Core 项目。我绝对没有 NHibernate 的经验。我正在寻找 @MappedSuperclass Hibernate 注释的等价物。要么我找不到好的解决方案,要么我无法使用任何找到的解决方案。但从一开始:我的每个实体都继承自基类BaseEntity,包含几个技术领域/列
public class BaseEntity
{
public virtual long id { get; set; }
public virtual DateTime inDate { get; set; }
public virtual DateTime? outDate { get; set; }
//some other properies
}
public class AnyClass : BaseEntity
{
//some AnyClass properties
}
public class AnyClassMap : ClassMapping<AnyClass>
{
public AnyClassMap()
{
Table("any_table");
//Copy/Paste to each mapping class
Id(b => b.id, x => { x.Column("id"); x.Generator(Generators.Native); x.Type(NHibernateUtil.Int64); });
Property(b => b.inDate, x => { x.Column("in_date"); });
Version(b => b.outDate, x => { x.Column("out_date"); x.Type(NHibernateUtil.DbTimestamp); });
//Some other BaseEntity properties
//some AnyClass properties
}//ctor
}
在每个映射类中,我都会重复关于基类属性的映射。但是,我想实现类似于:
public class BaseEntityMap : MappedSuperclassEquvalent<BaseEntity>
{
public BaseEntityMap()
{
Id(b => b.id, x => { x.Column("id"); x.Generator(Generators.Native); x.Type(NHibernateUtil.Int64); });
Property(b => b.inDate, x => { x.Column("in_date"); });
Version(b => b.outDate, x => { x.Column("out_date"); x.Type(NHibernateUtil.DbTimestamp); });
//Some other BaseEntity properties
}//ctor
}
public class AnyClassMap : ClassMapping<AnyClass>
{
public AnyClassMap()
{
Table("any_table");
//example only
IncludeMapping(BaseEntityMap.Class);
//some AnyClass properties
}//ctor
}
我知道我可以将 BaseEntity 用作 ComponentMapping,然后在 AnyClass 类中将其用作属性。但是,ComponentMapping 不允许 id 和版本映射。另一方面,出于许多原因,我关心从基本实体继承。
先感谢您
解决方案
ClassMapping
只需根据您需要的所有内容创建基本映射类:
public class BaseEntityClassMapping<TBaseEntity>: ClassMapping<TBaseEntity> where TBaseEntity: BaseEntity
{
public BaseEntityClassMapping()
{
Id(b => b.id, x => { x.Column("id"); x.Generator(Generators.Native); x.Type(NHibernateUtil.Int64); });
Property(b => b.inDate, x => { x.Column("in_date"); });
Version(b => b.outDate, x => { x.Column("out_date"); x.Type(NHibernateUtil.DbTimestamp); });
//Some other BaseEntity properties
}
}
并根据此类进行映射:
public class AnyClassMap : BaseEntityClassMapping<AnyClass>
{
public AnyClassMap()
{
Table("any_table");
//some AnyClass properties
}
}
推荐阅读
- python - 使用 unittest.mock 的补丁装饰器和 new 获取补丁对象
- python - 如何使用 Python 在微分方程组中找到最大化目标的变量值?(批量反应器优化)
- swift - 使用 Swift 的 Sqlite3 数据库的问题
- linux - 如何在bash中修剪字符串变量
- reactjs - 用于 React Native 应用程序的 Laravel Http 图像缓存控制标头
- python - 为什么 re.sub() 在 Python 中默认添加不匹配的字符串?
- android - 使用领域和侦听器时应用程序崩溃
- reactjs - React - 如何使用 attirbut 重定向到 url 网站
- latex - 图片顶部的标题。来自块 rmardown 的选项
- r - 将多行合并为每组一行