如何将多个子类映射到NHIBERNATE实体(使用bycode)



我正在尝试设置一些映射,并得到此例外:

无法扩展未映射的类:共同点

[mappingException:无法扩展未映射类:共同点]
nhibernate.cfg.xmlhbmbinding.classbinder.getsuperclass(string 扩展名称) 217
nhibernate.cfg.xmlhbmbinding.mappingrootbinder.addentitiesmappings(hbmmapping Mappingschema,Idictionary`2继承中心) 352
nhibernate.cfg.xmlhbmbinding.mappingrootbinder.bind(hbmmapping mappingschema) 85
nhibernate.cfg.configuration.AddDeserialized映射(HBMMPAPPEN MappingDocument,String documentFileName) 156

我有3堂课。实体,共同点和用户。没有实体或共同表,只有一个用户表。用户从实体继承的共同点和共同点继承。实体和共同点是抽象的。

我已经定义了此映射:

public class Mapping : ConventionModelMapper
{
    public Mapping()
    {
        IsRootEntity((type, declared) =>
        {
            return typeof(Entity<Guid>) == type.BaseType;
        });
        IsEntity((x,y) => typeof(Entity<Guid>).IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface);
        Class<Entity<Guid>>(x =>
                                {
                                    x.Id(c => c.Id, m=>m.Generator(Generators.GuidComb));
                                    x.Version(c=>c.Version, (vm) => { });
                                });
    }
}

这样使用:

        var types = typeof(Mapping).Assembly.GetExportedTypes().Where(t => typeof(Entity<Guid>).IsAssignableFrom(t));
        var mapping = new Mapping().CompileMappingFor(types);
        configuration.AddMapping(mapping);

用户和共同点都在"类型"数组中。我也尝试添加一个共同点的映射,但没有区别。

        Class<CommonEntity>(x =>
        {
            x.Property(c => c.DateCreated, m => m.Type<UtcDateTimeType>());
            x.Property(c => c.DateModified, m => m.Type<UtcDateTimeType>());
        });

还尝试调用子类而不是类。如果我直接从实体继承用户,则一切正常。有帮助吗?

这个问题似乎是达到了具有尤其性的要求。我像这样修改了它,现在似乎正在工作。

   IsRootEntity((type, declared) =>
                         {
                             return !type.IsAbstract &&
                                    new[] {typeof (Entity<Guid>), typeof (CommonEntity)}.Contains(type.BaseType);
                         });

最新更新