Hibernate实现简单的多对多关系 - 字典还是列表?

时间:2009-10-08 23:58:07

标签: c# performance nhibernate

我有3个DB表:Person,Address和PersonAddress。 Person Address是一个简单的连接表(仅存储Person和Address的ID)。

在我的域模型中,我有Person和Address。 Person被配置为与Address(通过PersonAddress)具有多对多关系。在代码中,这是使用List<Address>实现的。

我被告知如果我......我会从nHibernate获得更好的表现。

  1. 创建PersonAddress域对象
  2. 将Person配置为与PersonAddress具有一对多关系
  3. 为此关系配置地址的多对多索引
  4. 使用Dictionary<Address, PersonAddress>
  5. 在代码中实现它

    这是真的吗?

2 个答案:

答案 0 :(得分:2)

我不会因为这个而在域中创建一个不必要的类。使用字典以获得更好的性能对我来说也很奇怪。

您可以使用idbag,更新速度更快。 (这在域中映射为List,但在数据库中有一个id。)

关于性能,总会考虑不同的事情。参考文档about collection performance中有一个非常有趣的章节。

答案 1 :(得分:1)

我也不会为NHibernate中的性能问题引入复杂的映射,直到建立这样做的需要为止。

除了标准的多对多映射外,您还可以使用带有PersonAddress对象的一对多策略(PersonAddress具有Persons集合和Addresses集合)。当您想要维护有关人员 - 地址关系的其他信息时,将使用此策略。