Dev*_*v X 3 c# asp.net entity-framework entity-framework-core
采取以下措施:
public class ClassA
{
public int ID { get; set; }
public ICollection<ClassB> ClassBs { get; set; }
public bool ChangeMe { get; set; }
}
public class ClassB
{
public int ID { get; set; }
public string test { get; set; }
public bool bar { get; set; }
public ClassA ClassA { get; set; }
public int ClassAID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我加载了一个 ClassB 对象,我想运行一些代码来执行一些操作,然后将 bar 更改为 true。
完成此操作后,如果 A 类的 ClassBs 集合中的每个 ClassB 都有 true,我想将 ClassA 的 ChangeMe 更改为 true。
因此,如果我将一个 ClassB 加载到名为 的对象中bla,我会尝试以下操作:
if (bla.ClassA.ClassBs.Where(x => x.bar == false).Count() == 0)
{
Do Something
}
Run Code Online (Sandbox Code Playgroud)
然而,尽管有大量应该加载的 ClassB 对象,但根据当地人的说法,我拥有的唯一一个是当前的,而且它似乎Do Something意外地发生了。
我已经尝试过以下方法:
_context.Entry(bla).Reference(x => x.ClassA).Load()
_context.Entry(bla).Collection(x => x.ClassA.ClassBs).Load()
_context.Entry(bla.ClassA).Collection(x => x.ClassBs).Load()
Run Code Online (Sandbox Code Playgroud)
还有一些,但是,我似乎遇到了各种不同的异常。
除了简单地加载另一个对象并.Include()以正常方式调用之外,还有什么办法可以实现我想要做的事情吗?
您可以 (1) 使用Query方法(可用于引用和集合导航属性)并 (2) 将其与急切加载方法 ( Include/ ThenInclude) 结合使用,例如
_context.Entry(bla).Reference(x => x.ClassA)
.Query() // <-- (1)
.Include(x => x.ClassBs) // <-- (2)
.Load();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |