Реализовать IEquatable для POCO

Я заметил, что DbSet.Add()в EF работает довольно медленно. Небольшое гугление выявило SO-ответ, обещающий 180-кратный прирост производительности :

https://stackoverflow.com/a/7052504/141172

. Однако я не совсем понимаю, как реализовать IEquatable, как предлагается в ответе.

Согласно MSDN , если я реализую IEquatable, я также должен переопределить Equals()и GetHashCode().

Как и во многих POCO, мои объекты являются изменчивыми . До фиксации в базе данных(SaveChanges())новые объекты имеют идентификатор 0. После сохранения объектов идентификатор служит идеальной основой для реализации IEquatable, Equals()и GetHashCode(). ].

Неразумно включать какое-либо изменяемое свойство в хэш-код, а поскольку в соответствии с MSDN

Если два объекта сравниваются как равные, метод GetHashCode для каждого объект должен возвращать одно и то же значение

Должен ли я реализовать IEquatableкак свойство -путем -сравнения свойств (например.this.FirstName == other.FirstName)и не переопределять Equals()и GetHashCode()?

Учитывая, что мои POCO используются в контексте EntityFramework, следует ли уделять особое внимание полю Id?

6
задан Community 23 May 2017 в 12:34
поделиться