NHibernate忽略未知实体

时间:2016-04-28 13:04:40

标签: c# .net nhibernate orm

NHibernate忽略未知实体

嗨,我正在努力解决以下问题:

我为每个具有多个已定义表的数据库(架构)提供了一个NHibernate映射文件。例如:

NHibernate映射文件:A

<!-- Table ServiceModules -->
<class name="ServiceModules" table="SERVICE_MODULES" lazy="true" >
<id name="Id" column="ID">
  <generator class="native">
    <param name="sequence">SEQ_SERVICE_MODULES</param>
  </generator>
</id>
<property name="Name">
  <column name="NAME" sql-type="VARCHAR2" not-null="false" />
</property>
<property name="Version">
  <column name="VERSION" sql-type="VARCHAR2" not-null="false" />
</property>
<property name="Description">
  <column name="DESCRIPTION" sql-type="VARCHAR2" not-null="false" />
</property>
</class>

<!-- Table Service -->
<class name="Service" table="SERVICE" lazy="true" >
<id name="Id" column="ID">
  <generator class="native">
    <param name="sequence">SEQ_SERVICE</param>
  </generator>
</id>
<property name="Name">
  <column name="NAME" sql-type="VARCHAR2" not-null="false" />
</property>
</class>
.
.
.

在这个NHibernate映射文件旁边,我有一个库项目,它托管了这个数据库中所有引用的类。例如:

NHibernate类项目:B

public class ServiceModules
{
    public virtual decimal Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Version { get; set; }
    public virtual string Description { get; set; }
}

public class Service
{
    public virtual decimal Id { get; set; }
    public virtual string Name { get; set; }
}

.
.
.

我在多个项目中引用了类项目以及NHibernate映射文件。一旦我在数据库中创建一个新表,我还必须更新NHibernate映射文件A以及类项目B,以反映最新的更改。

现在,如果我更新每个现有(并且正在运行)的解决方案,该解决方案依赖于NHibernate映射文件A和更新的类库B ,那么我得到了典型的&#34; NHibernate.MappingException:未知的实体类&#34;异常。

有没有办法告诉NHibernate只加载实际存在的类?

1 个答案:

答案 0 :(得分:0)

我很自信答案是肯定的。我不认为NHibernate中有这样的功能,或任何方便的扩展点来改变这种行为。

就个人而言,我通过将汇编中的映射作为嵌入式资源嵌入来避免这种麻烦,就像我的回答here一样。我将映射视为程序集的一部分,如果不重新编译程序集,它们就不应该更改。

我没有将映射视为配置文件:更改它们通常涉及代码更改。在这种情况下,需要重建。因此,将它们作为嵌入式资源实际上不是问题。