Как создать сопоставление компонента Fluent nHibernate с данными из другой таблицы - PullRequest
1 голос
/ 21 июня 2011

У меня возникают трудности с настройкой отображения Fluent nHibernate, когда я пытаюсь использовать функцию Component для создания объекта, который содержит данные из двух связанных таблиц базы данных.

Ниже приведена упрощенная версия базы данных и кода, в которой изложена основная проблема, с которой я столкнулся.

У меня есть настройка базы данных, которая выглядит примерно так:

Account
  - AccountId INT (PRIMARY KEY)
  - Currency VARCHAR(3)

SubAccount
  - SubAccountId INT (PRIMARY KEY)
  - AccountId INT (FOREIGN KEY reference to Account)
  - Balance DECIMAL

Я пытаюсь отобразить эти данные в следующие классы:

public class Account
{
    public virtual int Id { get; private set; }
    public virtual string Currency { get; private set; }
}

public class SubAccount
{
    public virtual int Id { get; private set; }
    public virtual Account Account { get; private set; }
    public virtual Money Balance { get; private set; }
}

Класс Money выглядит следующим образом:

public class Money
{
    public decimal Value { get; private set; }
    public string Currency { get; private set; }
}

Часть, с которой я борюсь, это то, где я пытаюсь отобразить значения SubAccount.Balance и Account.Currency в объект SubAccount.Balance Money.

Мои классы отображения (ниже) выполняют большую часть работы, но я не могу понять, как создать объект Balance, используя значение Balance из SubAccount таблица и значение Валюта из таблицы Account .

public class AccountMap : ClassMap<Account>
{
    public AccountMap()
    {
        Table("Account");

        Id(x => x.Id)
            .Column("AccountId");
        Map(x => x.Currency)
            .Column("Currency");
    }
}

public class SubAccountMap : ClassMap<SubAccount>
{
    public SubAccountMap()
    {
        Table("SubAccount");

        Id(x => x.Id)
            .Column("AccountId");
        References(x => x.Account)
            .Column("AccountId");

        Component(x => x.Balance,
            m =>
            {
                m.Map(y => y.Value)
                    .Column("Balance");

                m.Map(y => y.Currency)
                    .Column("Account.Currency"); // <-- This is where I get stuck
            });
    }
}

Возможно ли то, что я пытаюсь сделать, используя Fluent nHibernate?

1 Ответ

2 голосов
/ 23 июня 2011

Я не думаю, что это возможно, но для обходного пути:

public class SubAccount
{
    public virtual int Id { get; private set; }
    public virtual Account Account { get; private set; }
    protected virtual decimal Value { get; set; }
    public virtual Money Balance { get { return new Money(Value, Account.Currency); } }
}

public class SubAccountMap : ClassMap<SubAccount>
{
    public SubAccountMap()
    {
        Table("SubAccount");

        Id(x => x.Id)
            .Column("AccountId");
        References(x => x.Account)
            .Column("AccountId");

        Map(Reveal.Property<decimal>("Value"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...