是否有必要先查找实体以在保存之前填充另一个实体的导航 属性?

Is it necessary to lookup entity first to populate navigation property of another entity before saving it?

以前我是这样保存用户的:

context.User.Add(
  new User
  {
      GroupId = groupId
  });
await context.SaveChangesAsync()

但随后为群组引入了一个导航属性,所以现在这样保存它:

context.User.Add(
  new User
  {
      Group = await db.Groups.FindAsync(groupId)
  });
await context.SaveChangesAsync()

是否可以在保存父对象之前避免对每个导航 属性 进行数据库查找?像这样:

context.User.Add(
  new User
  {
      Group = new Group { GroupId = groupId }
  });
await context.SaveChangesAsync()

抛出实体验证异常:

Cannot insert the value NULL into column 'name', table 'Project.dbo.Groups'; column does not allow nulls. INSERT fails. The statement has been terminated.

所以我想知道是否有任何解决方法

你应该可以保持原来的样子。

context.User.Add(
  new User
  {
      GroupId = groupId
  });
await context.SaveChangesAsync();

如果您单步执行原始代码,您会注意到导航 属性 在您保存更改后将可用(通过延迟加载)。