fluent-nhibernate - 流利的 NHibernate : override derived classes not in the base class auto-mapping

标签 fluent-nhibernate

故事: 我有类用户和类组织:用户。我没有为这些类使用任何映射,让 FNH 自动进行映射。然后,我添加了

   public class OrganizationMap : IAutoMappingOverride<Organization>
   {
      public void Override(AutoMap<Organization> mapping)
      {
      }
   }

请注意,没有覆盖。所以我没想到 FNH 行为会发生任何变化。但我得到了这个(实际上在模式导出期间):

NHibernate.MappingException: (XmlDocument)(2,4): XML validation error: The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has incomplete content. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'.

生成的 Orders.Core.Organization.hbm.xml 确实是空的:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="">
  <class name="Orders.Core.Organization, Orders.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Organizations" xmlns="urn:nhibernate-mapping-2.2" />
</hibernate-mapping>

因此,在查看了 User.hbm 之后,我有了想法 - 我需要像这样覆盖基类中的组织:

   public class UserMap : IAutoMappingOverride<User>
   {
      public void Override(AutoMap<User> mapping)
      {
         mapping.JoinedSubClass<Organization>("ColumnId", m => {...}
         );
      }
   }

但是,我更愿意在 Organization 的单独映射覆盖类中执行此操作...毕竟,如果我在单个覆盖方法中有 5 个子类,映射会变成什么。

这可能吗?

最佳答案

您的覆盖告诉 FNH 您将手动为该类编写映射。您收到的错误是因为没有为组织映射任何内容(如果您查看生成的 HBM.xml,它将是空的)。

您究竟要为什么编写覆盖?

编辑:

在这种情况下,您可以这样做:

public class MyAlteration : IAutoMappingAlteration
{
    public void Alter(AutoPersistenceModel model)
    {
        model.ForTypesThatDeriveFrom<User>(
            map => map.HasMany<User>( x => x.Children)
        );
    }       
}

并且在配置 fluent nhibernate 时:

model.Alteration( a => a.Add<MyAlteration>());

注意:这是使用最新的 fluent nhibernate (1.0RC) 代码库。

关于fluent-nhibernate - 流利的 NHibernate : override derived classes not in the base class auto-mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1226723/

相关文章:

c# - FluentNHibernate 自动映射 "no persister for"

fluent-nhibernate - 动态组件流畅自动映射

NHIbernate 只读属性 - 流畅的映射

fluent-nhibernate - 流利的 NHibernate AutoMap CultureInfo

nhibernate - 流利的Nhibernate-映射组件(值对象)的集合?

nhibernate - 批量插入期间 Fluent NHibernate 命令超时

NHibernate:System.Argument 异常:已添加具有相同键的项目

c# - Fluent NHibernate 自动映射 : Alter DateTime to Timestamp

c# - 使用流利的 nhibernate 进行级联删除

c# - 如何创建忽略没有 setter 的属性的 Fluent NHibernate 约定