【问题标题】:Domain Design and NHibernate域设计和 NHibernate
【发布时间】:2010-08-16 20:41:54
【问题描述】:

鉴于下面的数据库设计,您将如何对其建模?地址类型是商务/家庭等,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's。 NHibernate Mapping 将轻松地将这些替换为对象,然后延迟/急切地加载它们,所以我认为这是最好的选择。意见?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    域看起来很干净。

    我要三思而后行的唯一想法是重命名某些属性/列名,这可能会导致混淆。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我建议将关系 Address-Person 和 Address-AddressType 转换为 on way 关系。如果每个地址现在是个人(居民),每个地址类型现在是地址(地址),则它不是很有用。通过这样做,您将变得非常简单。

        此外,每个地址都有一个唯一的人似乎没有意义。想象一下,您在模型中保存了一些人,他们只是一个家庭,共同生活在一个家中。因此它们都有相同的地址。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-16
            • 1970-01-01
            • 2012-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多