FluentNHibernate, получение 1 столбца из другой таблицы - PullRequest
3 голосов
/ 28 мая 2010

Мы используем FluentNHibernate, и мы столкнулись с проблемой, когда нашей объектной модели требуются данные из двух таблиц, например:

public class MyModel
{
   public virtual int Id { get; set; }
   public virtual string Name { get; set; }
   public virtual int FooId { get; set; }
   public virtual string FooName { get; set; }
}

Там, где есть таблица MyModel с Id, Name и FooId в качестве внешнего ключа в таблице Foo. Таблицы Foo содержат Id и FooName.

Эта проблема очень похожа на другой пост здесь: Nhibernate: объединить таблицы и получить один столбец из другой таблицы , но я пытаюсь выяснить, как это сделать с FluentNHibernate.

Я могу очень легко создать Id, Name и FooId ... но с отображением FooName у меня возникли проблемы. Это моя карта класса:

public class MyModelClassMap : ClassMap<MyModel>
{
   public MyModelClassMap()
   {
      this.Id(a => a.Id).Column("AccountId").GeneratedBy.Identity();
      this.Map(a => a.Name);
      this.Map(a => a.FooId);

      // my attempt to map FooName but it doesn't work
      this.Join("Foo", join => join.KeyColumn("FooId").Map(a => a.FooName));
   }
}

с этим отображением я получаю эту ошибку:

Элемент 'class' в пространстве имен 'urn: nhibernate-mapping-2.2' имеет недопустимый дочерний элемент 'join' в пространстве имен 'urn: nhibernate-mapping-2.2'. Список возможных ожидаемых элементов: 'join-subclass, загрузчик, sql-insert, sql-update, sql-delete, фильтр, набор результатов, запрос, sql-запрос' в пространстве имен 'urn: nhibernate-mapping-2.2'.

есть идеи?

1 Ответ

0 голосов
/ 08 июня 2010

Я думаю, вы здесь что-то не так поняли.

Вместо того, чтобы иметь Id, Name, FooId и FooName в одном классе, вам нужно создать два класса

public class MyModel
{
    public virtual int Id { get; set; }

    public virtual string Name { get; set; }

    public virtual Foo Foo { get; set; }
}

public class Foo
{
    public virtual int Id { get; set; }

    public virtual string FooName { get; set; }
}

И ваши классы отображения для них:

public class MyModelMapping : ClassMap<MyModel>
{
    public MyModelMapping()
    {
        this.Id(x => x.Id);
        this.Map(x => x.Name);
        this.References(x => x.Foo);
    }
}

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        this.Id(x => x.Id);
        this.Map(x => x.FooName);
    }
}

это должно помочь.

Но помните, что соглашение другой конфигурации:)

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