【发布时间】:2011-06-21 06:30:54
【问题描述】:
我在设置 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 对象.
我的映射类(如下)完成了大部分工作,但我不知道如何使用 SubAccount 中的 Balance 值构建 Balance 对象 em> 表和 Account 表中的 Currency 值。
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 做什么?
【问题讨论】:
-
仅供参考,您最好不要将货币作为字符串类型,而是将其作为单独的表格。这样您的 Account 实体中就不会出现不必要的货币值重复。
-
连接 (nhforge.org/doc/nh/en/index.html#mapping-declaration-join) 在您的情况下会有所帮助,但不幸的是,它很可能不允许在组件中使用。是否可以修改您的数据库。架构?
-
在不久的将来真的不可能修改架构。我尝试使用连接,但发现,正如您提到的,它不允许使用组件功能进行这种配置。
标签: c# nhibernate fluent-nhibernate