如何使用另一个表中的数据创建Fluent nHibernate组件映射

时间:2011-06-21 06:30:54

标签: c# nhibernate fluent-nhibernate

我在设置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 {{ 1}}对象。

我的映射类(下面)完成了大部分工作,但我无法弄清楚如何使用 SubAccount中的 Balance 值构建Money对象表和帐户表中的货币值。

Balance

我正在尝试使用Fluent nHibernate做什么?

1 个答案:

答案 0 :(得分:2)

我认为不可能,但是为了解决方法:

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