gpt4 book ai didi

c# - 导航属性和避免循环引用

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:20 24 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

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

有没有更好的办法?

最佳答案

To avoid circular references (I was getting issues when Unit Testing with autofixture), I removed the User navigation property from UserTeam.

Is there a better way?

  1. 如果你离开了 User Game 的属性类,你可以使用 Game.User而不是 UserTeam.User访问 User .

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

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

要删除循环依赖关系,必须使关联成为单向的(例如,User <- GameUser -> Game),并带有要删除哪个关联结束的选项。

所以,不是删除 User来自 Game 的属性(property)类,删除 Games 可能更合适来自 User 的属性(property)类并添加服务方法 GetGames(User)在一次调用中查询所有游戏。

关于c# - 导航属性和避免循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com