使用 Entity Framework 7 代码 首先,我有两个实体如下:
用户
public string UserId { get; set; }
[ForeignKey(nameof(UserId))]
public Queue Queue { get; set; }
队列
public string QueueId { get; set; }
每个User总是有一个Queue,UserId(User的Key)也正好是Queue的Foreign Key。
每个队列有 0..1 个用户。我知道这听起来很奇怪,但可以将 UserId/QueueId 视为可能用于单个用户或组的电子邮件地址。如果它是一个组,它不会与用户相关联,因为该组的成员是在其他地方制定的。 *因此队列实体上缺少免费的用户属性。
无论如何,我希望能够通过 nav 属性访问用户队列,所以我将它与上面显示的 ForeignKey 属性一起添加,以告诉它使用 UserId。迁移生成了以下代码,据我所知它看起来是正确的:
migrationBuilder.AddForeignKey(
name: "FK_Users_Queues_UserId",
table: "Users",
column: "UserId",
principalTable: "Queues",
principalColumn: "QueueId",
onDelete: ReferentialAction.NoAction);
...and from snapshot:
modelBuilder.Entity("Entities.User", b =>
{
b.HasOne("Entities.Queue", "Queue")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Queue");
});
但是当我尝试查询用户并让它加载 Queue 属性时,由于某种原因它不会加载它 - 即使表中有匹配的记录,队列仍然为空。
var user = _context.Users
.Include(x => x.Queue)
.FirstOrDefault(x => x.UserId == userId);
我注意到一些奇怪的事情:
var user = _context.Users
.Include(x => x.Queue)
.AsNoTracking()
.FirstOrDefault(x => x.UserId == userId);
我在 EF7 中使用默认值,我认为这是延迟加载,我不想更改它。我只是想了解这种行为。这是预期的吗?我只是在做傻事吗?
谢谢!