有没有一种方法来定义可重复使用的性质为n-休眠映射?
-
16-09-2019 - |
题
我有一个方案,我想添加一些标准的性能来我的实体。意思是我会有例如1int和2串的特性应用于所有相关实体。我有超过100映射的文件和大多数但并不是所有的将主机到这些新的特性。在类其容易界定这一点;在映射但是我发现没有参照其他比创建一个实用工具或xslt和应用,(如何定义重复使用 <generator> 元素在休眠映射).
但是我希望能够增加/修改/删除性质,从这个"标准的"映射。
谢谢任何答复
Edit1:一个例子的映射,我想补充一点
<property name="TimeOfEdit" column="TimeOfEdit" type="DateTime" not-null="true"/>
<many-to-one name="EditedBy" column="FK_EditedBy" cascade="save-update" not-null="true" />
Edit2:我删除了所接受的解决方案,因为与NH2.1.1XML实体都没有工作(NH-1236)和NH会扔一个"DTD禁止在这种XML document"
解决方案 5
看来,只要做到这一点,是使用动态映(http://ayende.com/Blog/archive/2008/05/01/Dynamic-Mapping-with-NHibernate.aspx)
作为这样的因为我已经界定一个界面,我实体将用于新性(可以说IAuditable)它只是问题的运行适当的代码时NH会的初始化
Configuration cfg = new Configuration() Mappings mappings = cfg.CreateMappings();
foreach (var persistentClass in mappings.Classes)
{
if (persistentClass.MappedClass is IAuditable)
{
...
}
}
然后
cfg.BuildSessionFactory();
拥有它有线和准备使用 约85类别的性能的影响可以忽略不计
其他提示
这取决于如何将这些特性是实现在你的课程。
如果他们的所有定义中的一个 基类或接口, 你可以地图,他们一旦在基本类或接口,并获得使用 union-subclass
.有一些局限性。阅读 这一章在它能够文件 关于它。
如果你决定要把它们放在一起进入一类,可以映他们作为一个 用户类型.这将类似于一个组成部分,但可以指定一些东西喜欢的类型的名字、长度和其他用户的类型。你仍然需要指定每个列名。
还有另外一个选择:你可以用 XML的实体.这是一个相当原始的功能,从XML这是支持它能够.阅读 这一章在新罕布什尔州参考文件 它在哪里提及。
为您的特定情况下,一个特殊的代码生成器是唯一的选择。
选项1:搜索 在基类-define这些3个属性
- 具备您的实体从这个基础继承
-set向上“每个类分层结构表
选项2:
- 定义这些3个属性作为成分。
- 可以具有用于在一个文件中的这些3个属性,其重复使用的映射。
您不妨来看看在 fluentNHibernate ,这将简化您的绘图工作。与自动映射你可能只需要一个抽象基类来定义这些属性。