【发布时间】:2013-07-25 12:26:44
【问题描述】:
我曾经为 POCO 中的多对多关系或关系 ID 生成所有帮助表,如 UsergroupUsers,但现在我希望 EF 处理它们。现在我认为这毕竟不是一个好主意。
问题
当我尝试获取特定用户的所有 UsergroupDynamicField 时,它会为每个用户组用户所在的每个用户组生成 N+1 查询。
Here 我通过简单地声明Usergroups 将是IQUeriable 而不是IEnumerable 克服了这个问题。现在我不能这样做,因为 EF 不会映射它,它必须是 ICollection。
代码
public class User
{
...
public virtual ICollection<Usergroup> Usergroups { get; set; }
public IEnumerable<UserField> Fields
{
get
{
var fields = this.Usergroups.SelectMany(x => x.UsergroupDynamicFields); // N + 1 for every Usergroup
foreach (var field in fields)
{
yield return new UserField
{
Name = field.Name
};
}
}
}
}
数据库
【问题讨论】:
标签: c# entity-framework entity-framework-5