我想学习NHibernate,我偶然发现了一个组合的数据库设计/“学习NHibernate如何工作”的问题。避免与NHibernate的对象身份
对我而言,我试图设计一个带有行和列的简单表格,其中每行都有一个“描述”,然后有一个“列值”列表(各种列),其中包含的数据为以及排序信息。在代码中,它会是这个样子:
public class Row
{
public virtual int ID { get; set; }
public virtual string Description { get; set; }
public virtual ICollection<Column> Columns { get; set; }
}
public class Column
{
public virtual Row ParentRow { get; set; }
public virtual int SortID { get; set; }
public virtual string Value { get; set; }
}
我的最终目标是要建立一个数据库架构,这将是...
- 两个表,“行”和“列”
- 行有两列:ID和说明。
- 列有三列:ParentID,SortID和Value。
由于列只能属于一行,理想情况下每个列在每个ParentID中都有一个唯一的排序ID,所以Column表的主键可以是ParentID和SortID,而不是第四个“ID “专栏。
但是,NHibernate每时每刻都在与我搏斗。它坚持我必须有一个列字段的ID。我想我有几个问题:
- 我的“模式目标”本身是否存在严重缺陷?对于每个Column来说,它是否有更好的设计来拥有自己的ID?如果是这样,为什么?
- 无论我正在寻找的模式是否是一个好设计,NHibernate中都可以完成这项工作吗?到目前为止,我已经成功地映射了“Row”类,但是如果没有NHibernate,我不能映射“Column”类,因为我不得不为它提供一个ID。 (对于它的价值,我使用Fluent NHibernate)。我如何绕过这个?