我有两个实体,用户和消息。我只想加载消息,而不是消息所属的用户。
这通常有效,因为我没有在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来解决此问题,因为它也可能 被遗忘,因为一个人没有意识到这种行为。
答案 0 :(得分:0)
您必须停用Lazy-Load并使用AsNoTracking()
,如下所示:
ctx.Configuration.LazyLoadingEnabled = false;
var message = context.messages.AsNoTracking().FirstOrDefault(m => m.id == 123);