可能是一个愚蠢的问题,但我在这里有些困惑。
我有一个包含孩子列表的父实体。
public class Parent
{
public int Id { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
}
EFcore将在表ParentId
中创建一个Child
作为外键。
现在,假设我要检索具有特定父级的所有子级,该怎么办? ParentId
对象中没有Child
。
因此,我不能做类似的事情:
var result = model.Child.Where(child => child.ParentId == 3);
我可以将ParentId
属性添加到实体中的子级,但是我真的不希望手动分配此属性。如果我仅通过指定getter将其设置为只读,则迁移将不再起作用。
答案 0 :(得分:3)
EF Core允许您使用shadow property方法访问LINQ to Entities查询中的关联EF.Property:
寻址实体实例上的给定属性。当您要在LINQ查询中引用阴影状态属性时,此功能很有用。当前,此方法只能在LINQ查询中使用,在其他情况下不能用于访问分配给属性的值。
您只需要知道名称和类型-在您的情况下,它们是“ ParentId”和int?
(可选):
var result = model.Child.Where(child => EF.Property<int?>(child, "ParentId") == 3);
答案 1 :(得分:2)
我建议您同时在@ScotG答案中提供相应类别中的引用(儿童父母和父母子女)。
但是,由于您不想要这样做,因此在EF中使用延迟加载,您可以执行类似model.Parents.Find(3).Children
的操作,因为从Parent类中,您可以得到其子级的引用。
答案 2 :(得分:0)
public class Child
{
public int Id { get; set; }
// add these navigation properties to access the Parent
public int ParentId {get; set; }
public Parent Parent {get; set; }
}
https://www.learnentityframeworkcore.com/conventions/one-to-many-relationship