如何使用非主键映射同一类中的两个表

时间:2015-06-23 22:56:02

标签: c# .net nhibernate

我有这堂课:

public class Account
{
    public virtual int Id { get; set; }
    public virtual decimal Balance { get; set; }
    public virtual int IdExternalAccount { get; set; }
}

表示我的数据库中的tabble帐户。

关键是我需要将属性Balance映射到引用其他名为V_DEBITACCOUNT的表的特定属性。

CREATE TABLE V_DEBITACCOUNT (
IDACCOUNT NUMERIC(19,0) NOT NULL PRIMARY KEY,
BALANCE NUMERIC(18,4) NULL
)

表V_DEBITACCOUNT上的字段IDACCOUNT引用帐户中的字段IdExternalAccount。

我已经使这个映射部分起作用了。

Table("WTBR_CVW.ACCOUNT");
            Id(x => x.Id, m =>
            {
                m.Generator(Generators.Sequence, p => p.Params(new { sequence = "WTBR_CVW.SQACCOUNT" }));
                m.Column("IDACCOUNT");
            });

Property(
                x => x.IdExternalAccount,
                m => m.Column("IDEXTERNALACCOUNT"));

Join("WTBR_CVW.ACCOUNT",
               m =>
               {
                   m.Table("WTBR_CVW.V_DEBITACCOUNT");
                   m.Optional(true);

                   m.Key(x =>
                   {
                       x.PropertyRef(pr => pr.IdExternalAccount);
                       x.Column("IDACCOUNT");
                   });

                   m.Property<decimal>(x => x.Balance, map =>
                   {
                       map.Column("AVAILABLEBALANCE");
                   });

                   m.Property<System.DateTime>(x => x.ReferenceDate, map =>
                  {
                      map.Column("LASTUPDATETIME");
                  });

               });

问题是PropertyRef不起作用。连接正在考虑在帐户的PrimeryKey中定义的Id,并忽略指定的。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你在这里做错了什么。它是NHibernate的unsupported feature,将在即将发布的4.1.0版本中修复。