【问题标题】:How do I use Fluent nHibernate to map a multi-table entity using a foreign key from the primary entity using an FK->PK relationship?如何使用 Fluent nHibernate 使用 FK->PK 关系的主实体的外键映射多表实体?
【发布时间】:2011-05-24 19:43:02
【问题描述】:

这是来自 hbm 风格的 nhibernate 的基本示例。

http://ayende.com/blog/2327/multi-table-entities-in-nhibernate

public class Person
{
  public int PersonId {get;set;}
  public string Name {get;set;}
  public string AddressStreetAddress {get;set;}
  public string AddressZipCode {get;set;}
}

在数据库中,Person 有一个 Id 主键、一个名称字段和一个地址外键。地址有自己的主键、街道地址字段和邮政编码字段。

正确答案是“不要这样做。”。不幸的是,我被一个实体对象困住了,该对象公开了另一个实体的 Id 和 Name ,而这些实体对象仍在其他地方使用。目前,该对象不会通过 nHibernate 持久化回数据库。

我认为这样做的方法是使用地址作为实体的表,并从 Join() 添加 Person 字段。作为转换的中间步骤,这样做会产生什么后果?

【问题讨论】:

    标签: join fluent-nhibernate


    【解决方案1】:

    我认为这样做的方法是使用 作为实体表的地址 并从 加入()。有什么后果 这样做是中间步骤 转型?

    这是一个坏主意,因为您可以映射到的唯一 Id 是可以在多人之间共享的地址的 Id。

    相反,将 Address 的私有/受保护属性添加到 Person,映射 Address 并使用以下 Fluent 调用引用地址。

    References(Reveal.Member<Person, Address>("Address")).Column("address_id")
    

    然后,您可以使用 AddressStreetName 和 AddressZipCode 传递到 Address.StreetName 和 Address.Zipcode。之后,只需将系统的其余部分重构为正常状态即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2013-06-26
      • 2015-06-20
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多