0
我在C#中使用Visual Studio 2010中的实体框架4。为什么我的包含实体并未包含在内?
我有一个方法用于存储库,该方法返回一个包含各种导航属性的对象集。直到最近,这种方法看起来像这样...
private IEnumerable<VRTSystem> GetSystems() {
return ctx
.Include(s => s.Customer.CustomerType)
.Include(s => s.VRTSystemProductConfigurations);
}
...其中ctx是通用类型VRTSystem的ObjectSet。完整的方法有很多。包括()比这,但这足以显示的重点。
这工作得很好,但我需要添加一些代码以确保只有返回了Active标志设置为true的VRTSystemProductConfigurations。下面针对这种情况,通常给出的建议,我改变了代码看起来像这样...
private IEnumerable<VRTSystem> GetSystems() {
return ctx
.Include(s => s.Customer.CustomerType)
.Include(s => s.VRTSystemProductConfigurations)
.Select(s => new {
System = s,
VRTSystemProductConfigurations = s.VRTSystemProductConfigurations.Where(pc => pc.Active)
})
.Select(s => s.System);
}
然而,这个新版本不包括任何导航属性,它们都是空。
任何人都知道为什么?
嗯,不知道我现在做了什么,但是我确信在某些时候我有AsEnumerable()在尝试解决这个问题。这是做这件事的正常方法的一部分。我想知道我是否把它放在错误的地方?无论如何,我添加它,因为你展示,现在它的作品,所以感谢。但是,我不确定为什么您认为我不想包含VRTSystemProductConfigurations。也许我应该指出,我们已经禁用了懒加载,因为这些实体是通过WCF发送的,所以必须急切地包含所有内容。不知道这是否会改变事情。如果没有,请解释你为什么认为我应该包括他们。 –
这是因为您只想加载活动的'VRTSystemProductConfigurations',不是吗?包含不会加载所有这些内容吗? –
是的,但是由于延迟加载关闭,如果我没有使用include,那么它不会加载其中的任何一个。据我所知,这是当你不使用延迟加载时唯一的方法。 –