1

我正在尝试设置一些映射并收到此异常:

无法扩展未映射的类:CommonEntity

[MappingException:无法扩展未映射的类:CommonEntity]
NHibernate.Cfg.XmlHbmBinding.ClassBinder.GetSuperclass(String extendsName)+217
NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema,IDictionary`2 inheritMetas)+352
NHibernate.Cfg.XmlHbmBinding .MappingRootBinder.Bind(HbmMapping mappingSchema) +85
NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) +156

我有3节课。实体、通用实体和用户。没有实体或公共实体表,只有一个用户表。User 继承自 CommonEntity,CommonEntity 继承自 Entity。Entity 和 CommonEntity 是抽象的。

我已经定义了这个映射:

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);

User 和 CommonEntity 都在“types”数组中。我也尝试为 CommonEntity 添加映射,但没有任何区别。

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

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

4

1 回答 1

0

问题似乎是 CommonEntity 满足 IsRootEntity 的要求。我像这样修改了它,现在似乎一切正常。

   IsRootEntity((type, declared) =>
                         {
                             return !type.IsAbstract &&
                                    new[] {typeof (Entity<Guid>), typeof (CommonEntity)}.Contains(type.BaseType);
                         });
于 2012-11-10T13:31:54.113 回答