鉴于下面的数据库设计你将如何建模?地址类型是商务/家庭等,而地址表上的PersonId是因为一个人有很多地址。
我最常做的事情是:
public class Person
{
public virtual int PersonId { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName{ get; set; }
public virtual DateTime DOB{ get; set; }
public virtual IList<Address> Addresses { get; set; }
}
public class Address
{
public virtual int AddressId{ get; set; }
public virtual Person Resident{ get; set; }
public virtual AddressType Location{ get; set; }
public virtual string PostalCode{ get; set; }
public virtual string FullAddress{ get; set; }
}
public class AddressType
{
public virtual int AddressTypeId{ get; set; }
public virtual string Description{ get; set; }
public virtual IList<Address> Addresses { get; set;}
}
然而我不知道这是否合适。
我总是用对象完成我的模型,并且从未离开int
。 NHibernate Mapping很容易用对象替换它们,然后懒惰/急切地加载它们,所以我只是觉得这是最好的选择。意见?
答案 0 :(得分:1)
域名看起来很干净。
我唯一想到的是重新命名一些属性/列名称,这可能导致混淆。
答案 1 :(得分:0)
我会像现实一样对它进行建模,Person有几个地址,每个地址可以是不同的类型,省略所有数据库ID字段。这将使您的NHibernate配置和查询更难创建,但您的域模型将更容易使用。
答案 2 :(得分:0)
我建议将关系Address-Person和Address-AddressType转换为正常关系。如果每个地址现在都是其Person(常驻),并且每个AddressType现在都是其地址(地址),则它不是很有用。通过这样做,您将更加简单。
此外,为每个地址设置一个独特的人似乎毫无意义。想象一下,你在模特中拯救了一些人,他们只是一个家庭,一起住在一个家里。因此,他们都有相同的地址。
答案 3 :(得分:0)
我会将Address
和AddressType
多对一关系更改为。它实际上是一对一的,在这种情况下,AddressType
将作为字段进入Address
表。这是恕我直言的最佳形式。