Проблема картографирования NHibernate - PullRequest
0 голосов
/ 24 июля 2011

Я не могу понять, как правильно сопоставить мои отображения с помощью Nhibernate 3.0

У меня есть два POCO:

public class Account
{
    public virtual string AccountNumber { get; set; }

    public virtual IList<AccountSummary> AccountSummaries { get; set; }
}

public class AccountSummary
{
    public virtual uint Id { get; protected set; }

    public virtual string AccountNumber { get; set; }

    public virtual DateTime TradeDate { get; set; }
}

Я хочу отобразить классы в таблицах следующим образом:

Таблица: учетные записи (столбец: account_number)

Таблица: account_summaries (столбец: id, столбец: trade_date, столбец: account_number)

Как можно избежать наличия объекта Account в классе AccountSummary, как я обычно делал бы с отображением один-ко-многим / многие-к-одному. Вместо того, чтобы мой класс AccountSummary имел объект Account, я хочу, чтобы класс AccountSummary имел свойство AccountNumber, как в определении класса со ссылкой на класс Account.

Я также хотел бы отобразить столбцы trade_date и account_number как натуральный идентификатор или уникальный ключ.

Мои отображения выглядят так:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                           assembly="FundAccountDBExperiment"
                           namespace="FundAccountDBExperiment.Models">
  <class name="Account" table="accounts">
    <composite-id>
      <key-property name="AccountNumber" column="account_number" length="40"/>
    </composite-id>
    <bag name="AccountSummaries" table="account_summaries" cascade="all-delete-orphan" inverse="true">
      <key column="account_number"/>
      <one-to-many class="AccountSummary"/>
    </bag>
  </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                            assembly="FundAccountDBExperiment"
                            namespace="FundAccountDBExperiment.Models">
  <class name="AccountSummary" table="account_summaries">
    <id name="Id" column="id">
      <generator class="native"/>
    </id>
    <property name="TradeDate" column="trade_date" type="date" not-null="true"/>
    <join table="account">
      <key column="acount_number"/>
    </join>
  </class>
</hibernate-mapping>

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 25 июля 2011

Разве этого не достаточно?

public class AccountSummary
{
    public virtual uint Id { get; protected set; }

    public virtual Account Account { get; set; }

    public virtual string AccountNumber
    {
        get { return Account.AccountNumber; }
        set { Account.AccountNumber = value; }
    }

    public virtual DateTime TradeDate { get; set; }
}

и уникальное ограничение см. "MyUniqueIndex"

  <class name="AccountSummary" table="account_summaries">
    <id name="Id" column="id">
      <generator class="native"/>
    </id>
    <property name="TradeDate" column="trade_date" type="date" not-null="true" index="myUniqueIndex" />
    <many-to-one column="acount_number" lazy="false" index="myUniqueIndex">
  </class>

надеюсь, это поможет

...