Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 不同查询加载的实体框架DBContext导航属性?_Entity Framework - Fatal编程技术网

Entity framework 不同查询加载的实体框架DBContext导航属性?

Entity framework 不同查询加载的实体框架DBContext导航属性?,entity-framework,Entity Framework,我有两个实体,用户和消息。我只喜欢加载消息,而不喜欢加载消息所属的用户 这通常起作用,因为我在linq查询中不包括相关实体。但是,如果我用另一个查询单独加载用户,只从该用户(名称)获取一个字符串,那么它就不起作用了 我正在使用EF 6.1.0、没有代理生成的POCO和WCF服务来传递数据。多余的 导航属性值随后被意外传输 var message = context.messages.FirstOrDefault(m => m.id == 123); var user = contect.

我有两个实体,用户和消息。我只喜欢加载消息,而不喜欢加载消息所属的用户

这通常起作用,因为我在linq查询中不包括相关实体。但是,如果我用另一个查询单独加载用户,只从该用户(名称)获取一个字符串,那么它就不起作用了

我正在使用EF 6.1.0、没有代理生成的POCO和WCF服务来传递数据。多余的 导航属性值随后被意外传输

var message = context.messages.FirstOrDefault(m => m.id == 123);

var user = contect.users.FirstOrDefault(u => u.id = 456);

var message_username_composition = new M_U_C{ m = message, username = user.name };

return message_username_composition;
在这种情况下,即使我不喜欢,也会加载消息的导航属性(用户)

禁用懒散加载没有帮助,只有使用单独的上下文才能解决问题

除了使用两种上下文,还有其他方法吗

这是故意的吗

我也不喜欢手动将导航属性设置为null来解决这个问题,因为它也可能
忘记,因为您没有意识到这种行为。

您必须禁用延迟加载并使用
AsNoTracking()
,如下所示:

ctx.Configuration.LazyLoadingEnabled = false;
var message = context.messages.AsNoTracking().FirstOrDefault(m => m.id == 123);

如果设置了
message.User
,您为什么会在意呢?这将是因为EF实现的方式。它知道您的消息与id为456的用户相关,因此它将自动填充属性。在客户端,我仅通过外键更改用户,因为我没有加载所有用户。因此,我必须将导航属性设置为null,这可能会导致错误。此外,如果不需要的话,我也不希望在服务调用结果中包含对象图。我很想知道为什么导航属性会被另一个查询加载。我觉得在这种情况下我无法控制自己的行为。因此,在服务器端,我可能会通过使用相同上下文的助手查询意外地引入包含。Dean:我可以更改该模式的行为吗?或者该解决方案只是一个单独的上下文?haim770:请考虑可能意外通过服务边界的敏感数据!我认为另一种解决方案是使用投影,只选择需要的列。