导航属性和避免循环引用

时间:2013-10-31 23:15:42

标签: c# asp.net-mvc-4 entity-framework-4

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

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

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

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

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

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

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

所以,现在我必须从View中调用一个方法,类似于GetUser(userteam.UserId)

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  

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

     

有更好的方法吗?

  1. 如果您离开User课程的Game属性,则可以使用Game.User代替UserTeam.User来访问User

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

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

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

    因此,不是从User类中删除Game属性,而是从Games类中删除User属性并添加服务方法{更合适} { {1}}在一次通话中查询所有游戏。