实体框架无需请求即可加载导航属性

blf*_*tes 5 c# entity-framework navigation-properties entity-model

在项目中工作时,我看到了一个奇怪的行为,我无法理解加载导航属性。

这是一个重现这个“问题”的小例子。

在此处输入图片说明

我想加载一年,但不包括公司的数据(导航属性)。

我的代码:

public static Year GetYear(int id)
{
    using (var context = new testModelContainer())
    {
        var result = context.YearSet.FirstOrDefault(c => c.Id == id);
        //Company test = context.CompanySet.Where(c => c.Id == id).FirstOrDefault();

        return result;
    }
}  
Run Code Online (Sandbox Code Playgroud)

这将返回我想要的年份,导航属性中没有数据,但是如果我取消注释该行并只执行该行,可能是因为我想知道公司名称或其他什么,它会自动将公司数据包含到公司中年度最佳导航属性。

知道如何防止这种行为吗?出于安全原因,我想避免发送“父母”的数据。

我正在使用 EF 6、.NET 4.5。

And*_*rew 4

这是因为您正在一个上下文中执行命令。如果在一个上下文中工作,实体会彼此共享信息。

因此,如果您首先检索Year,然后检索Company引用了 Year 实体且具有先前检索的 Year 值的 ,您的导航属性将自动更新,反之亦然 - Year 将填充 Company 属性。

  • @blacai,请注意,如果您手动更改该属性值(假设您将其设置为 null),EF 会将其视为实体的更新。接下来,如果您调用 SaveChanges,这些将被保存到数据库中。 (2认同)