Ответ 1
Если вы посмотрите на документацию для DbSet<TEntity>.Find Method
:
Находит объект с указанными значениями первичного ключа.
Я заглянул в исходный код для метода Find
и нашел:
/// <exception cref="T:System.InvalidOperationException">Thrown if multiple entities exist in the context with the primary key values given.</exception><exception cref="T:System.InvalidOperationException">Thrown if the type of entity is not part of the data model for this context.</exception><exception cref="T:System.InvalidOperationException">Thrown if the types of the key values do not match the types of the key values for the entity type to be found.</exception><exception cref="T:System.InvalidOperationException">Thrown if the context has been disposed.</exception>
public virtual TEntity Find(params object[] keyValues)
{
return this.GetInternalSetWithCheck("Find").Find(keyValues);
}
поэтому метод будет вызывать InvalidOperationException в случае нескольких объектов.
Брошено, если в контексте с несколькими ключевыми словами существует несколько объектов значения, указанные
Внутренний вызов Find
не преобразуется в Single/SingleOrDefault
; вместо этого простой цикл используется для проверки нескольких объектов.
Поскольку метод специфичен для первичного ключа, он должен генерировать исключение в случае нескольких объектов. Вот почему он генерирует запрос для выбора не менее двух записей. Аналогично вызову Single
.