在EntityFramework Core 2.0

时间:2017-09-13 13:51:58

标签: entity-framework entity-framework-core

我必须每天一次将每个测量点的大约100个带时间戳的测量值插入表中。该模型是

public class MeasuredValue
{        
    public DateTime Timestamp { get; set; }

    public int MeasuringPointID { get; set; }

    public double Value { get; set; }
}

其中主键是Timestamp和MeasuringPointID的组合。大多数情况下,值将是 new ,这意味着我可以在没有键冲突的情况下插入它们,这样我就可以了:

List<MeasuredValue> measuredValues = ... read from somewhere ...

var ctx = new DatabaseContext(config.ConnectionString);

foreach (var mv in measuredValues)
    ctx.MeasuredValues.Add(mv);

ctx.SaveChanges();

但是,在某些情况下,需要(部分)重新读取数据,这会让上面的代码抛出重复的键异常,可能是因为只有一个重复的键(时间戳)。

这个问题的有效解决方案是什么?

我应该在循环中为每个测量值调用SaveChanges,捕获异常并进行更新吗?我是否应该总是尝试找到密钥并更新记录(如果存在),否则插入?还有别的吗?

更新

请注意 100条记录听起来很少。但是,请考虑测量点的数量可能是1000,每天会产生100000条记录!

(另外我添加了pre-core EntityFramework标签,因为我觉得这个问题在那里会是一样的)

0 个答案:

没有答案