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

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



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

我的代码:

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;
    }
}


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

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

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

最佳答案

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

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

09-10 02:10
查看更多