【问题标题】:Navigation property is NULL after insert in Entity Framework在实体框架中插入后导航属性为 NULL
【发布时间】:2025-11-29 12:45:01
【问题描述】:

我看到this post 提出了一个答案,但我的情况有点不同。

// Create a new Lunch entity with these two properties.
Lunch lunchEntity = new LunchEntity();
lunchEntity.UserId = userId;
lunchEntity.MealId = mealId;

// Add the entity to the DbContext and save the changes.
restaurantEntities.Lunches.Add(lunchEntity);
restaurantEntities.SaveChanges();

// Get the Lunch entity that we inserted above.
Lunch mySavedLunchEntity = restaurantEntities.Lunches.Find(lunchEntity.Id);

现在,插入Lunch 实体后,我需要包含其所有导航属性的实例。这就是为什么我使用 Find() 方法来选择新创建的实体。问题是 User 导航属性为空,而 Meal 导航属性引用了正确的对象。

另外,如果我执行这个语句

Lunch mySavedLunchEntity = restaurantEntities.Lunches.Find(lunchId);

另外,在另一个应该为特定 Id 检索午餐实体的方法中,所有导航属性都正确包含。

所以,我的问题是,当我只查询给定元素时,为什么我的所有导航属性都包含在内,而如果我仅在插入元素后才查询该元素,则其中一些不包含?

【问题讨论】:

    标签: c# .net entity-framework insert navigation-properties


    【解决方案1】:

    你可以试试:

    Lunch mySavedLunchEntity = restaurantEntities.Lunches.Where(l => l.LunchId == lunchId).Include(l => l.User).Include(l => l.Meal)
    

    这会强制 EF 加载两个导航属性,而不是延迟加载它们。

    【讨论】:

    • 嘿,谢谢!我知道这可以解决问题,但我不想这样做,因为当我只查询实体时,它可以在没有它们的情况下正常工作。我只是无法弄清楚为什么在插入操作后查询时它的工作方式不同。