我正在尝试解决多对多关系。在数据库级别,一切对我来说看起来都很不错,但是当我尝试获取该数据(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: ?
}
}
我不知道,我做错了什么?
答案 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中指定关系的信息。