EF 对象行为



>每当我更改实体对象引用时,更改都会反映到指向同一实体的所有其他先前对象。 示例:

   var menu = menuRepo.FindByByIdAsync(12);
   var menu1 = menuRepo.FindByByIdAsync(12);
   menu.Name = "Name";
   Console.WriteLine(menu.Name+ " "+ menu1.Name);

此时,如果我运行代码片段,菜单和menu1都会更改。发生这种情况是因为实体的代理吗?我真的不明白。如果这两个对象在哪里类对象它们会有不同的名称...这怎么可能?

编辑

更奇怪的是我尝试过的 Orderby 场景......

 var menu = menuRepo.FindById(1);
 menu.MenuItems.OrderBy(m => m.OrderField).ToList();

这 2 行实际上对菜单对象内的项集合进行排序。

我甚至不必设置它们...???

 menu.MenuItems = menu.MenuItems.OrderBy(m => m.OrderField).ToList();
EF

在其上下文中仅保留同一对象的一个实例;FindByIdAsync 检索 Id = 12 的项,并在上下文中设置它的引用。第二次调用 FindByIdAsync 时,它会返回从上下文到同一对象的引用。因此,这就是为什么当您更改第一个对象中的属性时,第二个对象中的相应属性也会更改。

按顺序不返回排序集合本身; 返回值是一个对象,用于存储执行排序所需的所有信息。

在通过直接调用其 GetEnumerator 方法或使用 foreach 枚举对象之前,不会执行排序。

menu.MenuItems.OrderBy(m => m.OrderField)

不执行任何排序

menu.MenuItems.OrderBy(m => m.OrderField).ToList(); 

执行排序,因为调用了 ToList((

最新更新