.NET Core 2.1 - Entity Framework:在添加到数据库之前检查重复项

.NET Core 2.1 - Entity Framework: Check for duplicates before adding to DB

在我的 SQL 服务器数据库中,我有一个 table 的 IOT 数据(接近 1,000,000 条记录)。当应用程序收到入站读数时,我想检查数据库是否还没有具有相同时间戳的该设备的读数。检查具有匹配属性的记录的最快方法是什么?

型号

public class Reading
{
    public int Id { get; set; }
    public double Measurement { get; set; }
    public int DeviceId { get; set; }
    public Device Device { get; set; }
    public DateTime Timestamp { get; set; }
}

添加阅读方法

public class ReadingRepository
{
    private readonly DataContext _context;

    public ReadingRepository(DataContext context)
    {
        _context = context;
    }

    public void AddReading(Reading reading)
    {
        // my proposed method... is there a better way?
        if (!_context.Readings.Any(r =>
            r.DeviceId == reading.DeviceId,
            r.Timestamp == reading.Timestamp))
            _context.Readings.Add(reading);
    }
}

最快的方法是插入并有一个唯一的索引打击并对错误信息作出反应。

替代方法是使用存储过程。

根据定义,您使用 EF 所做的任何事情都不是最快的选择。是的,这并不意味着完全放弃 - EF 适用于 80% 到 95% 的操作。绕过这个就可以了。