在Include中使用的Lambda表达式无效。 EF6,导航属性

时间:2019-11-16 05:32:27

标签: c# sql entity-framework linq asp.net-core

我正在尝试解决多对多关系。在数据库级别,一切对我来说看起来都很不错,但是当我尝试获取该数据(inlcude)时,它会失败。

我得到:

  

在Include中使用的Lambda表达式无效。

我所说的/尝试过的:

var readRecipes = db.MyClasses. 
                     Include(blog => blog.SomeCollections).ThenInclude(post => post.Prop1).
                     Include(blog => blog.SomeCollections).ThenInclude(post => post.Prop2).

结构

MainClass:

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

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

2 个答案:

答案 0 :(得分:1)

好,我解决了我的问题。

代替:

public ICollection<NavigationProperty> NavigationPropertys; 

我应该使用过:

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

这使Lambda崩溃了。

谢谢。

答案 1 :(得分:-1)

如果您还希望包括导航属性的子级,则应该执行以下操作:

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和Navigation实体之间的关系。我在您的模型中看不到外键。当然,这不是必需的,这取决于您如何使用OnModelCreating中的modelBuilder在覆盖的DbContext方法中配置关系,或者如何使用属性指示关系。 here可以找到更多有关关系和在ef-core中指定关系的信息。