【发布时间】:2015-02-28 18:54:45
【问题描述】:
我的模型中定义了多对一关系: Project.CreatedBy = ApplicationUser.Id:
class Project{
[Required]
public ApplicationUser CreatedBy {get; set;}
}
带映射:
modelBuilder.Entity<Project>().HasOptional(i => i.CreatedBy).WithOptionalDependent().WillCascadeOnDelete(false);
不幸的是,当我尝试通过以下方式从 DbContext 检索所有用户时:
var users = context.Users;
生成的 SQL 如下所示:
SELECT
[...]
FROM [dbo].[AspNetUsers] AS [Extent1]
LEFT OUTER JOIN [dbo].[Projects] AS [Extent4] ON ([Extent4].[CreatedBy_Id] IS NOT NULL) AND ([Extent1].[Id] = [Extent4].[CreatedBy_Id])
所以当某个用户创建了 10 个项目时,用户实体乘以 10 倍。我无法通过用户名查找该用户:
context.Users.Single(u => u.Username == "test")
因为它会给我序列包含多个元素异常。
你知道如何避免额外的加入吗?
我怀疑它与模型生成器声明有关。我一直在谷歌上搜索,但从未找到任何解决方案。
任何关于模型构建器和定义与它的关系的材料也将不胜感激。
【问题讨论】:
标签: asp.net asp.net-mvc entity-framework entity-framework-6