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

2多对一:

我遇到使用一对多映射的唯一原因是性能。
我最初采用一对一的方式,直到项目因性能问题而陷入困境。出现问题是因为您通常无法在反向进行一对一映射的延迟加载。例如,当您有实体 A 时,它可以(但不必)在该映射上具有相关实体 B。在这种情况下,对于您加载的每个实体 A,也会加载实体 B。这样做是为了防止检查相关对象是否存在时出错。延迟加载代理会误导您认为相关实体存在,即使它不存在。如果您像这样检查相关实体是否存在,您将会遇到问题
if (entityA.EntityB == null) HandleNoEntityB();
但是,如果您使用一对多映射,则延迟加载没有问题,因为开发人员正在使用我们可以为其创建代理的集合。
if (entityA.EntitiesB.Count == 0) HandleNoEntityB();
如果您可以在系统中假设实体 A 始终具有一个相关实体 B,那么这不一定是问题。在这种情况下,您应该在该映射上设置 contrained="true"。
| 归档时间: | 
 | 
| 查看次数: | 1735 次 | 
| 最近记录: |