5

我在代理和代理组(伪代码,缩写)之间有多对多的关系。

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

在代码中的某个时刻,我想获取所有 AgentGroups,并且我想为每个组预取/包含代理。我还想预先填写代理上的代理组集合。这在 EF 6 beta 中有效,但在 EF 6 rc1 中不再有效:

List<AgentGroup> allGroups = context.AgentGroups.Include("Agents").Include("Agents.AgentGroups").ToList();

我得到的错误信息是

无效的对象名称“dbo.AgentAgentGroups”。

事实上,没有桌子AgentAgentGroups,桌子是dbo.AgentGroupAgents。关于让它再次工作的任何想法?

我目前没有注释,也没有使用 fluent API,这完全是默认的代码优先约定。

4

1 回答 1

6

在 rc1 中,多对多关联中联结表的命名约定似乎发生了变化。当我在各种 EF 版本中尝试您的模型时,我看到的是:

  • EF5(稳定):AgentGroupAgents
  • EF6(测试版):AgentGroupAgents
  • EF6(RC1):AgentAgentGroups

如果 beta 不同,那也不错,但是 rc1 与上一个 RTM 版本不同,这使得这是一个重大变化。接得好!

编辑

EF 团队的回答

您好,
在 EF6 之前,模型创建的某些领域是不确定的 - 根据您是在 x86 还是 x64 上运行,您可以获得不同的模型。多对多连接表名就是这些领域之一。在 EF6 中,我们解决了这个问题,以确保结果始终相同。不幸的是,这确实意味着对于某些模型(取决于它们运行的​​架构)升级到 EF6 可能会导致模型更改。但是现在计算的模型将在机器和未来版本的 EF 中保持一致。如果要继续使用原始名称,最好的选择是使用 Fluent API 指定连接表名称
〜罗文

于 2013-09-20T09:45:35.320 回答