【问题标题】:Fluent Nhibernate, Subclass, ManyToMany. An association from the table refers to an unmapped class流利的 Nhibernate、子类、多对多。表中的关联引用了未映射的类
【发布时间】:2010-10-18 15:39:31
【问题描述】:

我正在使用 Fluent(1.1.0) NHibernate(2.1.2) 并且我有一个(子)子类,其中包含对另一个类的多对多引用:

(子)子类----其他类

FloorplanObject(基类)

几何(子类)

展位(子子类)---- 参展商

基类:

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:来自表 ExhibitorStand 的关联引用了一个未映射的类:Stand

有人知道我在这里做错了什么吗?

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate


    【解决方案1】:

    哦,亲爱的。真是个假人:

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

    如果您浪费时间阅读这篇文章,我们深表歉意。第一个也是....:/

    【讨论】:

    • 这和我遇到的问题一模一样!
    • 还有我,一点也不浪费时间......可能节省了我几个小时!
    【解决方案2】:

    您的映射看起来正确,看起来您的会话工厂初始化逻辑由于某种原因没有拾取您的 StandMap 类。只需验证您的 Fluently.Configure() 代码是否可以访问您的所有类映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2012-01-18
      相关资源
      最近更新 更多