我有一个引用自己的实体模型,如:
public class User
{
public int Id { get; set; }
[MaxLength(150)]
[Required]
public string FirstName { get; set; }
[Required]
public int? CreatedByUserId { get; set; }
[ForeignKey("CreatedByUserId")]
public ICollection<User> CreatedUsers { get; set; }
[ForeignKey("CreatedByUserId")]
public User CreatedByUser { get; set; }
}
在我尝试include
CreatedByUser
属性以及Take
方法之前,一切正常。请考虑以下示例:
// say that user 'Rita' was created by 'Tom'
var result1 = await Dependencies.AppDbContext.Users.Where(m => m.FirstName == "Rita").Take(1).Include(m => m.CreatedByUser).FirstOrDefaultAsync();
// result1 = 'Tom', but I would expect it to be 'Rita';
var result2 = await Dependencies.AppDbContext.Users.Where(m => m.FirstName == "Rita").Include(m => m.CreatedByUser).FirstOrDefaultAsync();
// result2 = 'Rita' which is what I expect
奇怪的是,当我从result1调用ToList()
查询时,它会返回正确的结果。当我在Visual Studio调试中查看结果时也是如此。
有人可以解释发生了什么吗?我想这并不重要,因为调用FirstOrDefault
设置了底层SQL查询的Top
参数,但仍然......这让我很头疼。