【发布时间】:2013-09-20 06:04:35
【问题描述】:
代理和代理组之间存在多对多关系(伪代码,缩写)。
public class Agent {
public virtual List<AgentGroup> AgentGroups { get; set; }
}
public class AgentGroup {
public virtual List<Agent> Agents { get; set; }
}
在代码中的某个时刻,我想获取所有 AgentGroups,并且我想预取/包含每个组的 Agents。我也想在代理上预填充 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,这完全是默认的代码优先约定。
【问题讨论】:
-
升级到 rc1 之前是否创建了数据库?当我尝试您的代码时,我看到了一个表
AgentAgentGroups,但测试版创建了AgentGroupAgents。我想你在这里有一个独家新闻! -
初始模型没有 AgentGroups,而是使用 EF 6 beta 创建的。然后我添加了 AgentGroups 概念并使用 EF 6 rc1 创建了一个迁移。迁移将表创建为 AgentGroupAgents! CreateTable("dbo.AgentGroupAgents", etc
-
这仍然在我的清单上,有一天我会深入研究迁移和动态生成数据库之间的区别。看起来查询生成器与后者共享代码。我之前看到过迁移生成的表似乎与查询中的表名不匹配的问题。坏消息。
标签: c# entity-framework entity-framework-6