我有一个方案,我想添加一些标准的性能来我的实体。意思是我会有例如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 ,这将简化您的绘图工作。与自动映射你可能只需要一个抽象基类来定义这些属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top