Свободно владеет Nhibernate, Subclass, ManyToMany. Ассоциация из таблицы относится к несопоставленному классу - PullRequest
2 голосов
/ 18 октября 2010

Я использую 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>();
    }
}

(Sub) Отображение подкласса:

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

При инициализации сеанса IS с приведенными выше сопоставлениями я получаю следующую ошибку:

NHibernate.MappingException: ассоциация из таблицы ExhibitorStand ссылается на не отображенный класс: Stand

Кто-нибудь знает, что я здесь делаю не так?

Ответы [ 2 ]

10 голосов
/ 18 октября 2010

О, дорогой. что за дурачок:

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

Извиняюсь, если вы потратили время на чтение этого поста. Первый тоже ....: /

1 голос
/ 19 октября 2010

Ваши отображения выглядят корректно, похоже, что ваша логика инициализации Session Factory по какой-то причине не захватывает ваш класс StandMap.Просто убедитесь, что ваш код Fluently.Configure () может получить доступ ко всем вашим сопоставлениям классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...