.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% 的操作。绕过这个就可以了。
在我的 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% 的操作。绕过这个就可以了。