在他的博客中 http://ayende.com/blog/2381/nhibernate-one-to-one,Ayende 建议使用一对一可能不是实现传统 1:1 对象关系的最佳方式(例如 customer.Name == name.Customer)。
- 如何选择何时使用一对一关系?
- 为什么我应该选择2个一对多关系
- 一对一如何工作(没有生成 FK 列)
一对一:
2 多对一:
我遇到使用一对多映射的唯一原因是性能。
我最初采用一对一的方式,直到项目因性能问题而陷入困境。出现问题的原因是您通常无法在反向进行一对一映射的延迟加载。例如。当您有实体 A 可以(但不必)在该映射上有相关实体 B 时。在这种情况下,对于您加载的每个实体 A,也会加载实体 B。这样做是为了防止检查相关对象是否存在时出错。延迟加载代理会误导您认为相关实体存在,即使它不存在。如果您像这样检查相关实体是否存在,您将会遇到问题
if (entityA.EntityB == null) HandleNoEntityB();
但是,如果您使用一对多映射,则延迟加载没有问题,因为开发人员正在使用我们可以为其创建代理的集合。
if (entityA.EntitiesB.Count == 0) HandleNoEntityB();
如果您可以在系统中假设实体 A 始终具有一个相关实体 B,那么这不一定是问题。在这种情况下,您应该在该映射上设置 contrained="true"。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)