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

时间:2014-06-10 12:03:30

标签: entity-framework

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

这通常有效,因为我没有在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;

在这种情况下,我有加载消息的导航属性(用户),即使我不喜欢。

禁用LazyLoading没有帮助,只使用单独的上下文解决了这个问题。

除了使用两个上下文之外还有其他方法吗?

这是设计吗?

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

1 个答案:

答案 0 :(得分:0)

您必须停用Lazy-Load并使用AsNoTracking(),如下所示:

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