如何使用Fluent nHibernate使用FK-> PK关系从主实体使用外键映射多表实体?

时间:2011-05-24 11:04:20

标签: join fluent-nhibernate

这是hbm-style 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字段。这样做会带来什么后果作为转换的中间步骤?

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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

然后,您可以使用AddressStreetName和AddressZipCode传递给Address.StreetName和Address.Zipcode。在那之后,重构系统的其余部分是一件简单的事情。再次理智。