Как сопоставить две таблицы одному классу в беглом NHibernate - PullRequest
4 голосов
/ 24 июня 2009

У меня проблема с беглым отображением nhiberbate двух таблиц в один класс.

У меня есть следующая схема базы данных:

TABLE dbo.LocationName
(
  LocationId INT PRIMARY KEY,
  LanguageId INT PRIMARY KEY,
  Name VARCHAR(200)
)

TABLE dbo.Language
(
  LanguageId INT PRIMARY KEY,
  Locale CHAR(5)
)

И хочу построить следующее определение класса:

public class LocationName 
{
      public virtual int LocationId { get; private set; }
      public virtual int LanguageId { get; private set; }
      public virtual string Name { get; set; }
      public virtual string Locale { get; set; } 
}

Вот мой класс картирования:

  public LocalisedNameMap()
  {
     WithTable("LocationName");
     UseCompositeId()
        .WithKeyProperty(x => x.LanguageId)
        .WithKeyProperty(x => x.LocationId);
     Map(x => x.Name);

     WithTable("Language", lang =>
                             {
                                lang.WithKeyColumn("LanguageId");
                                lang.Map(x => x.Locale);
                             });
  }

Проблема в том, что сопоставление поля Locale происходит из другой таблицы, в частности, что ключи между этими таблицами не совпадают. Всякий раз, когда я запускаю приложение с этим сопоставлением, я получаю следующую ошибку при запуске:

Внешний ключ (FK7FC009CCEEA10EEE: Язык [LanguageId])) должен иметь одинаковый номер столбцов в качестве основного ссылочного ключ (LocationName [LanguageId, LocationId])

Как мне указать nHibernate для сопоставления LocationName с языком, используя только поле LanguageId?

1 Ответ

0 голосов
/ 08 октября 2014

Вы можете использовать, не зная имя в FNH, для денормализации класса, то есть, внести столбец из другой таблицы. Смотри http://ayende.com/blog/3961/nhibernate-mapping-join

...