Estoy usando .NET Core 2.0
con Entity Framework Code First. Tengo una tabla "HData" con estos pocos atributos: Id (PK), Valor (Índice con ignorar configuración de clave duplicada) y Tiempo. Esta tabla puede tener más de 10,000,000 entradas.
Inserto miles de entradas como esta:
dataList.ForEach(i => db.HData.Add(new HData() { Value = i, Time = some.CreateDateTime }));
db.SaveChanges();
Ya configuré IGNORE_DUP_KEY = ON
con el comando SQL, pero cuando el código se ejecuta hasta arriba en db.SaveChanges
, me muestra el mensaje de error duplicado como:
No se puede insertar una fila de clave duplicada en el objeto 'dbo.HData' con un índice único 'IX_HData_Value'. El valor de la clave duplicada es (abcde).
¿Cómo puedo resolverlo o, de todos modos, puedo capturar esta excepción y saltar a la siguiente inserción de datos?
Actualizar información de modelos HData
public class HData
{
public int Id { get; set; }
public string Value { get; set; }
public DateTime Time { get; set; }
}
OnModelCreating:
builder.Entity<HData>(b => {
b.Property(p => p.Time).HasDefaultValueSql("GETUTCDATE()");
b.HasIndex(p => p.Value).IsUnique(true).HasFilter(null);});
3ª actualización:
Configuré el IGNORE_DUP_KEY = ON
en la función EnsureSeedData
, el código de abajo
context.Database.ExecuteSqlCommand("ALTER INDEX [IX_HData_Value] ON [dbo].[HData] REBUILD WITH (IGNORE_DUP_KEY = ON)");
context.SaveChanges();
Si solo desea que se inserten los valores únicos, puede hacerlo de esta forma.
dataList.Distinct(l => l.value).ForEach(i => db.HData.Add(new HData() { Value = i, Time = some.CreateDateTime }));