NHibernate映射文件:DOCTYPE仍然不受支持?

时间:2018-04-17 12:11:04

标签: c# xml nhibernate-mapping

在Java-Hibernate(4.2版)中,我使用一个功能在其他XML文档中方便地包含其他XML文档:

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"[
    <!ENTITY authorizables SYSTEM  "classpath://authorizables.xml">
]>
...
<any name="Authorizable" meta-type="string" id-type="long">
    &authorizables; <!-- application specifc meta-value definitions for Authorizables with long-ID -->
    ...
</any>

和authorizables.xml(驻留在不同的包和jar文件中)包含具体类

<meta-value value="Spiel" class="otherpackage.class1"/>
<meta-value value="Team" class="otherpackage.class1"/>

在NHibernate 5.1(对于C#)中,我尝试了相同的映射方法,但得到异常

NHibernate.MappingException
+ InnerException    {"DTD is prohibited in this XML document ... System.Exception {System.Xml.XmlException}

从这篇(相当古老的)帖子Using Doctype in Nhibernate我明白了这一点 虽然NHibernate参考文档中仍记录了DOCTYPE功能(几年前)已从NHibernate中删除 版本:5.1,第8.1.6章。

我也找不到记录的hibernate配置属性来允许DOCTYPE处理。

DOCTYPE仍然不受支持吗? (然后我将尝试不同的映射approch)。

1 个答案:

答案 0 :(得分:0)

由于我在网上找不到DOCTYPE的解决方案,我选择了不同的映射方法:

  • 使我的公共集会的类成为abstract&#34;基类&#34;
  • 在映射文件中声明了此类abstract="true" 删除了<any ...部分
  • 从我的业务模型程序集中的基类派生了一个类
  • 将后者映射为<union-subclass ...与我现有的数据库表,并在此处放置<any ...部分,其中包含所有特定于业务模型的<meta-value ...定义

我还必须替换new&#34;基类&#34;在我的代码中使用new&#34;派生类&#34;,但这是可以接受的,因为所有这些地方都在我的商业模式汇编中。