Я заметил, что 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?