【问题标题】:Using Doctype in Nhibernate在 Nhibernate 中使用 Doctype
【发布时间】:2011-01-14 13:19:59
【问题描述】:

您好,我正在尝试将基类的通用属性保存在一个位置,并使用 XML ENTITY 在 Nhibernate 映射文件中进行引用。

映射文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping [
  <!ENTITY BasePropertyList SYSTEM "BasePropertyList.xml">
]>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Model" namespace= "Model" default-lazy="false">
<class name="DerivedClass">
    &BasePropertyList;
</class>
</hibernate-mapping>

BasePropertyList.xml

<id name="ID" column="ID" type="Int32" unsaved-value="0">
 <generator class="native"></generator>
</id>
<property name="CreatedDate" update="false" />
<property name="CreatedBy" update="false" />
<property name="LastModifiedDate" />
<property name="LastModifiedBy" />

我收到以下异常

System.Xml.XmlException :此 XML 文档中禁止使用 DTD。 在 NHibernate.Cfg.Configuration.LogAndThrow(Exception 异常)

我在这里遗漏了什么吗? DOCTYPE 在 Nhibernate 映射文件中是如何工作的??

【问题讨论】:

  • 我不知道doctype,但是你为什么不为basepropertylist中的属性使用一个公共子类呢?这将为您节省一些 ctrl+c/ctrl+v
  • @Paco...我假设 OP 已经使用对象完成了这项工作,现在希望继承也能在映射文件中工作。 AFAIK 无法使用映射文件执行此操作...
  • 我指的是 Nhibernate 文档中的这一部分。 ] 和映射中的 &allproperties; )。" >>>>

标签: nhibernate doctype


【解决方案1】:

我不知道如何解决 doctype 问题,但我从来没有认为这是一个功能。

如果要映射继承,可以使用The documentation中描述的三种策略之一

在您的情况下,每个类的表 可能是最好的映射方式。这意味着每个映射文件中都有重复的 xml。我认为没有办法避免这种情况,除了在基类更改时使用一些宏或构建脚本重新创建 xml(这不是避免问题的真正方法)。您还可以通过使用 FluentNhibernate 而不是 xml 并为基类型继承 ClassMap 类来避免该问题(这是我个人在项目中有一个公共基类时所做的)。

如果您希望能够在一次查询中查询数据库中所有对象的属性,您可能会喜欢 table per subclass 映射策略。每个子类的表不需要重复的 xml,但会在查询中添加一个 sql 连接。

【讨论】:

    【解决方案2】:

    在当前版本中已损坏。 我遇到了同样的问题,我测试了 2.0.1、2.1.0、2.1.1、2.1.2 版本,它坏了

    如果我正确阅读this,它不会被修复,它似乎是参考文档中的遗留物

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多