Столы
Currencies
----------
CurrencyId INT IDENTITY PK
IsoCode4217 CHAR(3) -- "USD", "GBP", "EUR", etc
Users
----------
UserId INT IDENTITY PK
CurrencyId FK REFERENCES Currencies (CurrencyId)
Отображение
Текущее приложение имеет объект Currency
, которому необходимо значение IsoCode4217
. Currency
не является сущностью в этом приложении, это его собственная странная жестко запрограммированная вещь, где мне нужно передать значение IsoCode4217
статической функции и получить экземпляр Currency
обратно. Таблица базы данных Currencies
является скорее таблицей перечисления. Итак, я решил, что я просто реализую IUserType
, и я пойду, но это не сработает, как я ожидал:
[hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"]
[class
name="BlahBlah.UserProfile, BlahBlah.Model"
schema="Core"
table="Users"
lazy="false"]
[id name="Identity" access="field.camelcase" column="UserId"]
[generator class="native" /]
[/id]
[join
schema="Core"
table="Currencies"
fetch="join"]
[key column="CurrencyId" property-ref="Currency" /]
[property
name="Currency"
column="IsoCode4217"
type="BlahBlah.CurrencyUserType, BlahBlah.Model" /]
[/join]
[/class]
[/hibernate-mapping]
(Я изменил угловые скобки на обычные скобки, поскольку мне не хочется думать о том, что собирается делать этот маленький редактор Markdown.)
Гадкий
SQL, который я бы ожидал, это
SELECT
u.UserId,
c.IsoCode4217
FROM Users AS u
INNER JOIN Currencies AS c
ON u.CurrencyId = c.CurrencyId
, но вместо того, чтобы NHibernate упорно дает мне
SELECT
u.UserId,
c.IsoCode4217
FROM Users AS u
INNER JOIN Currencies AS c
ON u.UserId = c.CurrencyId -- DANG IT!
Это действительно не поддерживается, или я пропускаю что-то очевидное? Можно ли просто "зациклить" дополнительный столбец из другой таблицы с целью отображения одного объекта?
Спасибо!