3

我最近重构了我的域模型以删除由导航属性引起的循环引用。下面是域模型的基本结构:

  • 用户有很多游戏
  • 游戏有很多 UserTeams
  • 用户有许多用户团队

以前我在 UserTeam 模型中有一个导航属性,用户。

为了避免循环引用(我在使用 autofixture 进行单元测试时遇到了问题),我从 UserTeam 中删除了 User 导航属性。

以前,在我的视图中,当循环浏览游戏时,我可以像这样获取 UserTeam 的用户:

foreach (game in games)
{
    foreach (userteam in game)
    {
        userteam.User.UserName
    }
}

现在我不能这样做(因为 User 不再是 UserTeam 的属性)。

所以,现在我必须从视图中调用一个方法,比如GetUser(userteam.UserId).

与以前的结构相比,这似乎非常低效(必须在每次循环迭代中进行数据访问)。

有没有更好的办法?

4

1 回答 1

0

为了避免循环引用(我在使用 autofixture 进行单元测试时遇到了问题),我从 UserTeam 中删除了 User 导航属性。

有没有更好的办法?

  1. 如果您User为该类留下了属性,则Game可以使用Game.User而不是UserTeam.User访问User.

  2. 如果您要删除每个循环引用,则有一些选项。

每个双向关联(例如User <-> Game)都会产生循环依赖。

要删除循环依赖关联,必须使用要删除的关联结束选项进行单向(例如,User <- Game或)。User -> Game

因此,与其从类中删除User属性,不如从类中删除属性并添加一个在单个调用中查询所有游戏的服务方法Game可能更合适。GamesUserGetGames(User)

于 2015-09-23T11:11:13.553 回答