我最近重构了我的域模型,以删除由导航属性引起的循环引用。以下是域模型的基本结构:
以前我在UserTeam模型中有一个导航属性,User。
为避免循环引用(我在使用自动混合进行单元测试时遇到问题),我从UserTeam中删除了用户导航属性。
以前,在我的视图中,在循环浏览游戏时,我可以像这样得到UserTeam的用户:
foreach (game in games)
{
foreach (userteam in game)
{
userteam.User.UserName
}
}
现在我不能这样做(因为User不再是UserTeam的属性)。
所以,现在我必须从View中调用一个方法,类似于GetUser(userteam.UserId)
。
与之前的结构相比,这似乎非常低效(必须在每次循环迭代时进行数据访问)。
有更好的方法吗?
答案 0 :(得分:0)
为避免循环引用(我在使用自动混合进行单元测试时遇到问题),我从UserTeam中删除了用户导航属性。
有更好的方法吗?
如果您离开User
课程的Game
属性,则可以使用Game.User
代替UserTeam.User
来访问User
。
如果您要删除每个循环引用,则有选项。
每个双向关联(例如,User <-> Game
)都会产生循环依赖关系。
要删除循环依赖关联,必须使用关联结束要删除的选项单向(例如,User <- Game
或User -> Game
)。
因此,不是从User
类中删除Game
属性,而是从Games
类中删除User
属性并添加服务方法{更合适} { {1}}在一次通话中查询所有游戏。