NHibernate一对一vs 2多对一

时间:2011-05-29 14:50:38

标签: c# nhibernate

In his blog,Ayende建议使用一对一可能不是实现传统1:1对象关系的最佳方式(例如customer.Name == name.Customer)。

  1. 如何选择何时使用一对一关系?
  2. 我为什么要选择2个一对多的关系
  3. 如何一对一工作(没有生成FK列)
  4. 一对一:

    One-to-one

    2多对一:

    enter image description here

1 个答案:

答案 0 :(得分:2)

我之所以遇到使用一对多映射的原因仅仅是因为性能。

我最初是一对一的,直到项目因性能问题而陷入困境。出现问题的原因是您通常无法在反面进行一对一映射的延迟加载。例如。当你有实体A时,可以(但不必须)在该映射上有相关的实体B.在这种情况下,对于您加载的每个实体A,也会加载实体B.这样做是为了防止错误,检查相关对象是否存在。延迟加载的代理会误导您认为相关实体存在,即使它不存在。如果您检查相关实体是否存在,那么您将遇到问题

if (entityA.EntityB == null) HandleNoEntityB();

如果您使用一对多映射,则延迟加载没有问题,因为开发人员正在使用我们可以创建代理的集合。

if (entityA.EntitiesB.Count == 0) HandleNoEntityB();

如果您可以在系统中假设实体A始终只有一个相关实体B,那么这不一定是个问题。在这种情况下,您应该在该映射上设置contrained =“true”。