这是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字段。这样做会带来什么后果作为转换的中间步骤?
答案 0 :(得分:1)
我认为这样做的方法是使用 地址作为实体的表格 并从中添加Person字段 加入()。有什么后果 这样做是为了中间步骤 转换?
这是一个糟糕的主意,因为您可以映射到的唯一ID是地址的ID,可以在多人之间共享。
相反,为地址添加私有/受保护属性,映射地址并使用以下Fluent调用引用地址。
References(Reveal.Member<Person, Address>("Address")).Column("address_id")
然后,您可以使用AddressStreetName和AddressZipCode传递给Address.StreetName和Address.Zipcode。在那之后,重构系统的其余部分是一件简单的事情。再次理智。