域设计和NHibernate

时间:2010-08-16 20:41:55

标签: nhibernate

鉴于下面的数据库设计你将如何建模?地址类型是商务/家庭等,而地址表上的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很容易用对象替换它们,然后懒惰/急切地加载它们,所以我只是觉得这是最好的选择。意见?

Database Design

4 个答案:

答案 0 :(得分:1)

域名看起来很干净。

我唯一想到的是重新命名一些属性/列名称,这可能导致混淆。

答案 1 :(得分:0)

我会像现实一样对它进行建模,Person有几个地址,每个地址可以是不同的类型,省略所有数据库ID字段。这将使您的NHibernate配置和查询更难创建,但您的域模型将更容易使用。

答案 2 :(得分:0)

我建议将关系Address-Person和Address-AddressType转换为正常关系。如果每个地址现在都是其Person(常驻),并且每个AddressType现在都是其地址(地址),则它不是很有用。通过这样做,您将更加简单。

此外,为每个地址设置一个独特的人似乎毫无意义。想象一下,你在模特中拯救了一些人,他们只是一个家庭,一起住在一个家里。因此,他们都有相同的地址。

答案 3 :(得分:0)

我会将AddressAddressType多对一关系更改为。它实际上是一对一的,在这种情况下,AddressType将作为字段进入Address表。这是恕我直言的最佳形式。

相关问题