Prerequisites
Please answer the following questions before submitting an issue. YOU MAY DELETE THE PREREQUISITES SECTION.
- v4.0
- MVC
- .Net
If issue related with ABP Framework
- 5.14
Hi, I have recently upgraded from ABP v4.3 to v5.14. I am now finding that I am getting the following discrepencies on GetHashCode for my Enity objects:
` // 10171594 var empdet = (await _employeeDetailManager.EmployeeDetails.SingleAsync(e => e.Id == 42)).GetHashCode();
// 59790523 var empdet5 = (await _employeeDetailManager .EmployeeDetails .AsNoTracking() .FirstAsync(e => e.Id == 42)).GetHashCode();
` This is causing me many issues, as it has broken all code that performs comarrisons between entities. All my entities inherit from base class FullAuditedEntity
Please can you advise as to why I am not getting consistent hash codes, and what I can do to rectify this..?
Many thanks
4 Answer(s)
-
0
Hi philwynn, Abp does not override GetHashCode().Are the HashCodes obtained by ABP v4.3 equal?
-
0
I am finding that the hashcode depends on how the entity was retrieved. The following code was working fine on v4.3 and no longer works on v5.14:
var selected = await _reportConfigurationColumnManager.GetConfigurationColumns() .AsNoTracking() .Where(c => c.ReportConfigurationTab.ReportConfigurationId == input.ConfigurationId) .Select(c => c.EmployeeDetail) .ToListAsync(); var all = await _employeeDetailManager.GetAuthorizedEmployeeDetails() .AsNoTracking() .ToListAsync(); return all.Except(selected).Select(ed => new ColumnListBoxItem { Type = ConfigurableReportColumnType.EmployeeDetail, Name = ed.TranslatedName, EmployeeDetailId = ed.Id }).OrderBy(i => i.Name);
For v5.14 I am alwasy getting the full "all" collection, as entity equality seems to have broken. If I override Equals and GetHashCode on the entity, then the code works again.
Note, however, that overriding Equals and GetHashCode is not a viable solution for me, as I would need to do this across the board for many entities.
Something has changed in ABP between these 2 versions to cause the entity equality to break.
Regards
-
0
Hi,
This might be related to EF Core 3.x breaking change https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.x/breaking-changes#no-tracking-queries-no-longer-perform-identity-resolution
-
0
Hi, Yes, this seems to have been the cause. Many thanks.