Fre*_*ddy 108 linq-to-entities entity-framework exists
从性能的角度来看,检查数据库中是否存在对象的最佳方法是什么?我正在使用Entity Framework 1.0(ASP.NET 3.5 SP1).
Ale*_*gas 217
如果您不想直接执行SQL,最好的方法是使用Any().这是因为Any()会在找到匹配后立即返回.另一个选项是Count(),但这可能需要在返回之前检查每一行.
以下是如何使用它的示例:
if (context.MyEntity.Any(o => o.Id == idToMatch))
{
// Match!
}
Run Code Online (Sandbox Code Playgroud)
在vb.net中
If context.MyEntity.Any(function(o) o.Id = idToMatch) Then
' Match!
End If
Run Code Online (Sandbox Code Playgroud)
从性能的角度来看,我猜使用EXISTS命令的直接SQL查询是合适的.请参阅此处了解如何在Entity Framework中直接执行SQL:http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework- 4.aspx
我必须管理这样一个场景,其中新数据记录中提供的重复项百分比非常高,并且进行了数千次数据库调用以检查重复项(因此 CPU 以 100% 的速度发送了大量时间)。最后我决定将最后 100,000 条记录缓存在内存中。通过这种方式,我可以针对缓存记录检查重复项,这与针对 SQL 数据库的 LINQ 查询相比非常快,然后将任何真正的新记录写入数据库(并将它们添加到数据缓存中,我也排序和修剪以保持其长度易于管理)。
请注意,原始数据是一个 CSV 文件,其中包含许多必须解析的单个记录。每个连续文件中的记录(以每 5 分钟大约 1 个的速度出现)有相当大的重叠,因此重复的百分比很高。
简而言之,如果您对传入的原始数据进行了时间戳记,几乎是按顺序排列的,那么使用内存缓存可能有助于记录重复检查。
| 归档时间: |
|
| 查看次数: |
132903 次 |
| 最近记录: |