【问题标题】:Entity Framework could not load the data from many to many relationship实体框架无法从多对多关系加载数据
【发布时间】:2018-02-13 16:41:16
【问题描述】:

我有名为 Contest、Problem 和 Judge 的模型 一个评委有很多比赛,一个比赛有很多评委

DataBase Diagram for Models

但是当我通过比赛 ID 从数据库中访问评委名单时,它不起作用

var existingJudge = this.unitOfWork.JudgeRepository.Get()
            .Where(r => r.Contest_Id.Contains(id) && r.Id == User.Identity.GetUserId()); 

我也试过了

existingJudge = this.unitOfWork.ContestRepository.GetById(id).JudgeList;

这里的id是指比赛id

【问题讨论】:

  • 是否有错误信息或您的 var 为空?
  • 不,我没有错误信息,只是模型为空

标签: entity-framework many-to-many


【解决方案1】:

你试过了吗:

var existingJudge = this.unitOfWork.JudgeRepository.Get()
        .Where(r => r.Contests.Any(t => t.Id == id));

如果id 包含正确的数字,这应该可以。

【讨论】:

【解决方案2】:

有几件事可能是错误的。

您能否也分享您的类图或类。您是否将链接的对象属性(即法官)标记为虚拟?此外,您的表使用 AspNetUser 作为名称,您是否正确映射了您的判断对象?我想看看您是如何将对象映射到表名的。

【讨论】:

  • 先生,我已经链接为虚拟也引用了 ID 外键。但注意到工作。这是我的模型github.com/lazyfahim/Tritron/tree/master/Model,这是我的存储库github.com/lazyfahim/Tritron/tree/master/Contracts,这是我的应用程序数据库上下文github.com/lazyfahim/Tritron/tree/master/DAL
  • 在 JudgeContests 表中,您使用 Judge_Id 与 AspNetUsers 表链接。按照惯例,它应该是 User_Id。同样在代码中,您使用 JudgeList_Id 作为外键。我认为您的命名约定不一致。您应该尝试在您的实体和表格中始终使用正确的名称。首先尝试使用默认命名约定。我觉得您不需要自定义名称。相反,您使用不同的名称会混淆自己。
  • 谢谢先生,但在另一个解决方案中,有人建议在代码中将两个类与一个 Judgecontests 类绑定。并使用流利的api。我完全是asp.net mvc5的新手。
  • 不需要另一个类,但是你可以使用流畅的API,很好用。但是您的命名不一致对于修复很重要。因此,甚至很难理解这种关系。您可以在此处阅读示例:如何建立这种关系:entityframeworktutorial.net/code-first/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多