嗨,我正在努力解决以下问题:
我为每个具有多个已定义表的数据库(架构)提供了一个NHibernate映射文件。例如:
<!-- 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映射文件旁边,我有一个库项目,它托管了这个数据库中所有引用的类。例如:
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只加载实际存在的类?
答案 0 :(得分:0)
我很自信答案是肯定的。我不认为NHibernate中有这样的功能,或任何方便的扩展点来改变这种行为。
就个人而言,我通过将汇编中的映射作为嵌入式资源嵌入来避免这种麻烦,就像我的回答here一样。我将映射视为程序集的一部分,如果不重新编译程序集,它们就不应该更改。
我没有将映射视为配置文件:更改它们通常涉及代码更改。在这种情况下,需要重建。因此,将它们作为嵌入式资源实际上不是问题。