NHibernate一对一与2个多对一

问题描述

| 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,那么这不一定是问题。在这种情况下,应在该映射上设置condinned = \“ true \”。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...