【发布时间】:2017-12-06 13:00:03
【问题描述】:
我最近一直在搞乱实体框架代码,同时试图看看我能用它做什么。 我测试的一种情况是尝试复制以下数据库架构:
表格:
- 人
- 播放器
- 经理
Person 表保存基本数据名称、年龄等
球员表只保存与球员相关的信息:currentclubId、positionId 等 玩家的基本详细信息将通过与玩家 ID 和 PersonId 上的 Person 表的 1:1 关系提供。
Manager 表与 player 表非常相似,在 Manager Id 和 person Id 上与 Person Table 保持 1:1 的关系。
这个架构背后的想法是,一个人可以在整个职业生涯中成为球员和经理,我想避免重复基本细节。
我的问题是 EF 使用 Person 属性生成玩家模型。
public class Player {
public Person Person {get;set;}
.....
}
因此,要获得玩家的名字,您必须调用 Player.Person.FirstName。 这个流程一开始还不错,但我开始看到 Player 和 Manager 查询存在性能问题,因为它们必须从两个表中获取。
有什么方法可以重构此架构以在不违反要求的情况下提高性能?
【问题讨论】:
-
只获取您需要的数据?您可以包含或不包含相关实体。
-
创建一个继承 Player 的新类并添加新属性。您可以向父级添加链接,但必须在添加新播放器时设置链接
-
@Sami 建立这种关系的原因是球员在他的职业生涯中可能是球员或经理,或两者兼而有之。我对重构的想法是创建一个历史表,并在其中指定该人是球队的球员还是经理,而不是当前版本
标签: c# sql sql-server database entity-framework