Include 中使用的 Lambda 表达式无效。 EF6,导航属性
Posted
技术标签:
【中文标题】Include 中使用的 Lambda 表达式无效。 EF6,导航属性【英文标题】:Lambda expression used inside Include is not valid. EF6, Navigation Property 【发布时间】:2020-03-12 05:58:23 【问题描述】:我试图解决多对多关系。在数据库级别上,一切对我来说都很好,但是当我尝试获取该数据时(inlcude
),它失败了。
我明白了:
Include 中使用的 Lambda 表达式无效。
我所说/尝试过的:
var readRecipes = db.MyClasses.
Include(blog => blog.SomeCollections).ThenInclude(post => post.Prop1).
Include(blog => blog.SomeCollections).ThenInclude(post => post.Prop2).
结构
主类:
public class MainClass
// ...
public ICollection<NavigationProperty> NavigationPropertys;
// ...
public MainClass()
this.NavigationPropertys = new Collection<NavigationProperty>();
导航属性:
public class NavigationProperty
public Guid ID get; set;
[Required]
public Guid? Prop1ID get; set; // 0,*
[Required]
public Guid? Prop2ID get; set; // 0,*
[Required]
public Guid MainClassID get; set;
[Required]
public Prop1 Prop1 get; set;
[Required]
public Prop2 Prop2 get; set;
public MainClass MainClass get; set;
[Required]
public float Amount get; set;
public NavigationProperty()
// todo: ?
我不知道,我做错了什么?
【问题讨论】:
嗯,所以Recipes
= MainClass
和 SomeCollection
= NavigationProperty
?您可以通过仅包含必要的属性来改进您的帖子。它使阅读更容易。
@Dennis1679 你是对的,我更正了。我应该包括Prop1
和Prop2
吗?
【参考方案1】:
好的,我解决了我的问题。
代替:
public ICollection<NavigationProperty> NavigationPropertys;
我应该使用:
public ICollection<NavigationProperty> NavigationPropertys get; set; ;
这导致 Lambda 崩溃。
谢谢。
【讨论】:
非常感谢!你节省了我的时间:)【参考方案2】:如果您还想包含导航属性的子项,您应该这样做:
Parent.Include(p => p.Children.Select(c => c.GrandChild));
或者如果每个孩子有很多孙子
Parent.Include(p => p.Children.SelectMany(c => c.GrandChildren));
或者如果每个父母只有一个孩子和一个孙子。
Parent.Include(p => p.Child.GrandChild);
我希望这会有所帮助。
编辑: 我没有意识到你的问题是关于 ef-core。我以为是某种伪代码或自制的扩展方法。
您是否阅读过 Microsoft 提供的有关此主题的 all the examples?否则,恐怕我没有足够的信息来帮助您解决这件事。
我需要看看你如何配置Prop1
和导航实体之间的关系。我在您的模型中没有看到外键。当然,这不是必需的,具体取决于您如何使用modelBuilder
中的modelBuilder
在覆盖的OnModelCreating
方法中配置关系,或者您如何使用属性来指示关系。有关 ef-core 中关系和指定关系的更多信息,请参阅here。
【讨论】:
您的示例公然跳过了.ThenInclude
的使用,这是专门为包含多级继承而设计的。它可能有效,但你没有提供他应该支持SelectMany
而不是ThenInclude
的理由,
你是对的。但 OP 明确指出: Include 中使用的 Lambda 表达式无效。但是您在他的标签中是对的,他间接表示他正在询问 ef-core。我会看看我是否可以修改我的答案。谢谢以上是关于Include 中使用的 Lambda 表达式无效。 EF6,导航属性的主要内容,如果未能解决你的问题,请参考以下文章