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

时间:2013-09-20 06:04:36

标签: 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; } 
}

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

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

我收到的错误消息是

  

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

事实上,没有表格AgentAgentGroups,表格为dbo.AgentGroupAgents。关于让它再次发挥作用的任何想法?

我目前没有注释,并且没有使用流畅的API,所有这些都是默认代码优先约定。

1 个答案:

答案 0 :(得分:6)

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

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

如果测试版不同,那也不错,但是rc1与上一个RTM版本不同,这使得这个版本发生了重大变化。好抓!

修改

Answer from the EF team

  

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