Include内部使用的Lambda表达式无效.EF6,导航属性



我试图解决一个多对多关系。在数据库级别上,一切对我来说都很好,但当我尝试获取数据(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>(); 
}
}

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: ?
}
}

我不知道,我做错了什么?

好的,我解决了我的问题。

代替:

public ICollection<NavigationProperty> NavigationPropertys; 

我应该使用:

public ICollection<NavigationProperty> NavigationPropertys { get; set; }; 

这让Lambda崩溃了。

谢谢。

如果您也想包含导航属性的子级,您应该执行以下操作:

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核心的。我认为这是某种类型的伪代码或自制的扩展方法。

你读过微软提供的关于这个主题的所有例子吗?否则,我恐怕没有足够的信息来帮助你。

我需要了解的一件事是如何配置Prop1和Navigation实体之间的关系。我看不出你的模型里有外键。当然,这不是必要的,这取决于您如何使用DbContext中的modelBuilder在重写的OnModelCreating方法中配置关系,或者您如何使用属性来指示关系。关于ef核心中的关系和指定关系的更多信息,可以在这里找到。

最新更新