In his blog,Ayende建议使用一对一可能不是实现传统1:1对象关系的最佳方式(例如customer.Name == name.Customer)。
一对一:
2多对一:
答案 0 :(得分:2)
我之所以遇到使用一对多映射的原因仅仅是因为性能。
我最初是一对一的,直到项目因性能问题而陷入困境。出现问题的原因是您通常无法在反面进行一对一映射的延迟加载。例如。当你有实体A时,可以(但不必须)在该映射上有相关的实体B.在这种情况下,对于您加载的每个实体A,也会加载实体B.这样做是为了防止错误,检查相关对象是否存在。延迟加载的代理会误导您认为相关实体存在,即使它不存在。如果您检查相关实体是否存在,那么您将遇到问题
if (entityA.EntityB == null) HandleNoEntityB();
如果您使用一对多映射,则延迟加载没有问题,因为开发人员正在使用我们可以创建代理的集合。
if (entityA.EntitiesB.Count == 0) HandleNoEntityB();
如果您可以在系统中假设实体A始终只有一个相关实体B,那么这不一定是个问题。在这种情况下,您应该在该映射上设置contrained =“true”。