我正在尝试设置一些映射,并得到此例外:
无法扩展未映射的类:共同点
[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);
});