我有点像EF newb,并且我使用的是.net core,除非我执行完整的“ from..in..join”,否则我似乎无法加载实体的相关实体。 “ linq语句。
我的实体具有Guid主键,并且我正在使用SQL Server作为数据库。
让我们看看我遇到问题的一个实体。
[Table("User")]
public class User : AuditableEntity
{
public Group CurrentlySelectedGroup { get; set; }
}
[Table("Group")]
public class Group : AuditableEntity
{
public string Name { get; set; }
}
用户可以选择一个组作为其“选定”组。我运行了迁移语句,并确定它确实在数据库上创建了我想要的东西-一个名为CurrentSelectedGroupId的全新列,它是Group表的PK列的FK。
所以看起来很棒。
然后我运行了一些代码,为表中的有效组添加了有效的Guid。
现在,当我执行以下代码行时:
var user = _dbContext.Users.Where(u => u.Id == userId).FirstOrDefault();
它完美地返回了我的用户,但是所有相关的实体都是空的。 我什至尝试过.include()之类的东西,包括“虚拟”,但没有运气。
知道我在做什么错吗?
谢谢!
答案 0 :(得分:1)
经过反复试验,似乎可以正常工作:
var user = _dbContext.Users.Single(u => u.Id == userId);
_dbContext.Entry(user).Reference(u => u.CurrentlySelectedGroup).Load();
有什么想法为什么还能奏效?
谢谢
答案 1 :(得分:0)
未启用延迟加载,此功能已包含在EF Core 2.1中。在您的情况下,Explicit Loading正在发生,因此您需要显式加载相关实体。因此,如果您使用的是EF Core 2.1,则只需启用Lazy Loading并使用相关实体,而无需显式添加它们。