Я прочитал статью о методе AsNoTrackingWithIdentityResolution() и о том, что это способ разрешения идентификаторов без отслеживания, и что при его использовании в фоновом режиме запускается средство отслеживания изменений, отличное от средства отслеживания контекста, для разрешения объектов, ссылающихся на одну и ту же строку, в один экземпляр.
Я пытался убедиться в этом, выполнив следующий код, но экземпляры не были разрешены в один экземпляр. экземпляр
// Initially the table is empty
Employee emp1 = new Employee()
{
FirstName = "name1",
LastName = "name2",
Salary = 11111
};
context.Add(emp1);
context.SaveChanges();
Employee emp2 = (from e in context.Employees
where e.FirstName == "name1"
select e).SingleOrDefault();
// Identity resolution takes place
Console.WriteLine(emp1 == emp2); // True
Employee emp3 = (from e in context.Employees
where e.FirstName == "name1"
select e).AsNoTrackingWithIdentityResolution().SingleOrDefault();
// Expected to give True due to using AsNoTrackingWtihIdentityResolution()
Console.WriteLine(emp1 == emp3); // but found False
Employee emp4 = (from e in context.Employees
where e.FirstName == "name1"
select e).AsNoTrackingWithIdentityResolution().SingleOrDefault();
// Also no identity resolution happened
Console.WriteLine(emp4 == emp3); // False
Сравнение ссылок дало результат только в том случае, если два сравниваемых экземпляра (которые разрешены в один экземпляр) отслеживались средством отслеживания изменений контекста, в то время как другие экземпляры не были разрешены в один экземпляр. Я использую EF core 8.0.2
Итак, теперь:
Почему экземпляры, ссылающиеся на одну и ту же строку, не были разрешены в один экземпляр при использовании метода AsNoTrackingWithIdentityResolution() с их запросами, поскольку это одна из его ожидаемых функций?
Почему существует автономный трекер, работающий в фоновом режиме при использовании этого метода, поэтому одной из целей использования этого метода было прекращение любого отслеживания?
Я прочитал статью о методе AsNoTrackingWithIdentityResolution() и о том, что это способ разрешения идентификаторов без отслеживания, и что при его использовании в фоновом режиме запускается средство отслеживания изменений, отличное от средства отслеживания контекста, для разрешения объектов, ссылающихся на одну и ту же строку, в один экземпляр. Я пытался убедиться в этом, выполнив следующий код, но экземпляры не были разрешены в один экземпляр. экземпляр [code]// Initially the table is empty Employee emp1 = new Employee() { FirstName = "name1", LastName = "name2", Salary = 11111 };
context.Add(emp1); context.SaveChanges();
Employee emp2 = (from e in context.Employees where e.FirstName == "name1" select e).SingleOrDefault();
// Identity resolution takes place Console.WriteLine(emp1 == emp2); // True
Employee emp3 = (from e in context.Employees where e.FirstName == "name1" select e).AsNoTrackingWithIdentityResolution().SingleOrDefault();
// Expected to give True due to using AsNoTrackingWtihIdentityResolution() Console.WriteLine(emp1 == emp3); // but found False
Employee emp4 = (from e in context.Employees where e.FirstName == "name1" select e).AsNoTrackingWithIdentityResolution().SingleOrDefault();
// Also no identity resolution happened Console.WriteLine(emp4 == emp3); // False [/code] [b]Сравнение ссылок дало результат только в том случае, если два сравниваемых экземпляра (которые разрешены в один экземпляр) отслеживались средством отслеживания изменений контекста, в то время как другие экземпляры не были разрешены в один экземпляр. Я использую EF core 8.0.2[/b] Итак, теперь: [list] [*]Почему экземпляры, ссылающиеся на одну и ту же строку, не были разрешены в один экземпляр при использовании метода AsNoTrackingWithIdentityResolution() с их запросами, поскольку это одна из его ожидаемых функций? [*]Почему существует автономный трекер, работающий в фоновом режиме при использовании этого метода, поэтому одной из целей использования этого метода было прекращение любого отслеживания? [/list]