我正在使用 Fluent(1.1.0) NHibernate(2.1.2),并且我有一个(子)子类,其中包含对另一个类的多对多引用:
(Sub)子类--<交叉表>--其他类
或
FloorplanObject(基类)
几何(子类)
展台(子子类)--< ExhibitorStand >-- 参展商
基类:
public class FloorplanObject
{
public int Id { get; set; }
public string Name { get; set; }
}
基类映射:
class FloorplanObjectMap : ClassMap<FloorplanObject>
{
public FloorplanObjectMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
子类:
public class Geometry : FloorplanObject
{
public virtual List<float> Positions { get; set; }
public Geometry()
{
Positions = new List<float>();
}
}
子类映射:
public class GeometryMap : SubclassMap<Geometry>
{
public GeometryMap()
{
Map(x => x.Positions);
}
}
(子)子类:
public class Stand : Geometry
{
public virtual string StandNumber { get; set; }
public virtual List<Exhibitor> HasExhibitors { get; set; }
public Stand()
{
HasExhibitors = new List<Exhibitor>();
}
}
(子)子类映射:
public class StandMap : SubclassMap<Stand>
{
public StandMap()
{
Map(x => x.StandNumber);
HasManyToMany(x => x.HasExhibitors)
.Cascade.All()
.Inverse()
.Table("ExhibitorStand");
}
}
其他类:
public class Exhibitor
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual List<Stand> OnStands { get; set; }
public Exhibitor()
{
OnStands = new List<Stand>();
}
}
其他类映射:
public class ExhibitorMap : ClassMap<Exhibitor>
{
public ExhibitorMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasManyToMany(x => x.OnStands)
.Cascade.All()
.Table("ExhibitorStand");
}
}
在使用上述映射初始化 ISession 时,出现以下错误:
NHibernate.MappingException: An association from the table ExhibitorStand refers to an unmapped class: Stand
有人知道我在这里做错了什么吗?
最佳答案
亲爱的。真是个假人:
class FloorplanObjectMap : ClassMap<FloorplanObject>
{
public FloorplanObjectMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
应该是:
public class FloorplanObjectMap : ClassMap<FloorplanObject>
{
public FloorplanObjectMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
如果您浪费时间阅读这篇文章,我们深表歉意。第一个也是……:/
关于c# - 流利的 Nhibernate,子类,ManyToMany。表中的关联引用未映射的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960760/