EntityFramework 6 RC1包含在多对多属性中失败

Cel*_*ste 5 c# entity-framework entity-framework-6

我在Agents和AgentGroups之间有多对多的关系(psuedocode,缩写).

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

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

在代码中的某个时刻,我想获取所有AgentGroup,并且我想为每个组预取/包含代理.我想预先填补剂的AgentGroups集合.这适用于EF 6测试版,但不再适用于EF 6 rc1:

List<AgentGroup> allGroups = context.AgentGroups.Include("Agents").Include("Agents.AgentGroups").ToList();
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是

无效的对象名称'dbo.AgentAgentGroups'.

事实上,没有一张桌子AgentAgentGroups,桌子就是dbo.AgentGroupAgents.有关让这个再次起作用的想法吗?

我目前没有注释,我没有使用流畅的API,它严格地说是默认代码的第一个约定.

Ger*_*old 6

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

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

如果测试版不同,那也不错,但是rc1与上一个RTM版本不同,这使得这是一个突破性的变化.接得好!

编辑

EF团队的回答:

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