Как лучше всего проверить, существует ли объект в базе данных с точки зрения производительности? Я использую Entity Framework 1.0 (ASP.NET 3.5 SP1).
114
Как лучше всего проверить, существует ли объект в базе данных с точки зрения производительности? Я использую Entity Framework 1.0 (ASP.NET 3.5 SP1).
Если вы не хотите выполнять SQL напрямую, лучше всего использовать Any () . Это потому, что Any () вернется, как только найдет совпадение. Другой вариант - Count () , но перед возвратом может потребоваться проверка каждой строки.
Вот пример того, как его использовать:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
И в vb.net
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
T
интерфейсом, который есть,IEnumerable
и возвращаете объекты, содержащиеId
, вы сможете использовать свою универсальную функциюIsExists<T>()
.С точки зрения производительности я полагаю, что прямой SQL-запрос с использованием команды EXISTS был бы уместен. См. Здесь, как выполнить SQL непосредственно в Entity Framework: http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4. aspx
источник
Мне пришлось управлять сценарием, в котором процент дубликатов, предоставляемых в новых записях данных, был очень высок, и для проверки дубликатов выполнялось очень много тысяч вызовов базы данных (так что ЦП отправлял много времени на 100%). В конце концов, я решил оставить последние 100 000 записей в кеш-памяти. Таким образом, я мог проверять наличие дубликатов кэшированных записей, что было чрезвычайно быстро по сравнению с запросом LINQ к базе данных SQL, а затем записывать любые действительно новые записи в базу данных (а также добавлять их в кеш данных, что я также отсортированы и обрезаны, чтобы длина оставалась управляемой).
Обратите внимание, что исходные данные были файлом CSV, содержащим множество отдельных записей, которые необходимо было проанализировать. Записи в каждом последующем файле (который поступает примерно 1 раз каждые 5 минут) значительно перекрываются, отсюда высокий процент дубликатов.
Короче говоря, если у вас есть входящие необработанные данные с метками времени, в основном в порядке, то использование кеша памяти может помочь при проверке дублирования записей.
источник
Я знаю, что это очень старый поток, но просто на случай, если кому-то вроде меня понадобится это решение, но в VB.NET вот что я использовал на основе ответов выше.
источник
У меня были проблемы с этим - мой EntityKey состоит из трех свойств (PK с 3 столбцами), и я не хотел проверять каждый из столбцов, потому что это было бы некрасиво. Я думал о решении, которое работает постоянно со всеми сущностями.
Другая причина в том, что я не люблю каждый раз ловить UpdateExceptions.
Для получения значений ключевых свойств требуется немного Reflection.
Код реализован как расширение для упрощения использования:
Посмотри:
источник
Я просто проверяю, является ли объект нулевым, у меня он работает на 100%
источник
Почему бы не сделать это?
источник
Лучший способ сделать это
Независимо от того, что это за объект и для какой таблицы в базе данных, единственное, что вам нужно, - это первичный ключ в объекте.
Код C #
Код VB.NET
источник