いくつかのマッピングをセットアップしようとしていますが、この例外が発生しています:
マップされていないクラスを拡張できません: CommonEntity
[MappingException: マップされていないクラスを拡張できません: CommonEntity]
NHibernate.Cfg.XmlHbmBinding.ClassBinder.GetSuperclass(String extendsName) +217
NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema, IDictionary`2 inheritedMetas) +352
NHibernate.Cfg.XmlHbmBinding .MappingRootBinder.Bind(HbmMapping mappingSchema) +85
NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) +156
私は3つのクラスを持っています。Entity、CommonEntity、および 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>());
});
また、クラスの代わりにサブクラスを呼び出してみました。User を Entity から直接継承すると、すべて正常に動作します。何か助けはありますか?