foreign - insert entity framework c#
Entity Framework-UPSERT en índices únicos (1)
Busqué un poco con respecto a mi problema, pero no puedo encontrar nada que realmente ayude.
Así que mi problema / dilema sigue así: Sé que la base de datos mysql tiene un sistema de índice único que se puede usar para insertar / actualizar en la misma consulta utilizando este formato: insert into t(a,b,c) values(1,1,1) on duplicate keys update b=values(b),c=values(c);
y un formato de reemplazo usado para reemplazar una grabación existente por ese índice.
para ser honesto, la única cosa similar que vi en MSSQL es la merge
pero realmente no me gusta en absoluto y verificar una consulta para insertar o actualizar no es un índice único basado en todo ...
Entonces, ¿cómo puedo emular el único UPSERT de mysql en Entity Framework? este es mi principal problema ...
Quiero decir, sin obtener el registro del conjunto de entidades y verificarlo si es nulo o no para una posible inserción o actualización;
Puedo conseguirlo? ¿O no? Cualquier sugerencia puede ser útil.
Vi this pero no aparece en la versión 6 ...
ejemplo de entidad:
[Table("boats")]
public class Boat
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[MaxLength(15)]
[Index("IX_ProviderBoat",1,IsUnique=true)]
public string provider_code { get; set; }
public string name { get; set; }
[Index("IX_ProviderBoat", 3, IsUnique = true)]
[MaxLength(50)]
public string model { get; set; }
[Index("IX_ProviderBoat", 2, IsUnique = true)]
[MaxLength(15)]
[Key]
public string boat_code { get; set; }
public string type { get; set; }
public int built { get; set; }
public int length { get; set; }
}
Así que quiero actualizar / insertar según mi índice único IX_ProviderBoat usando EF
El método AddOrUpdate
es un miembro de IDBSet
y está disponible en EF6.
El método AddOrUpdate
no es una operación atómica, las llamadas de varios subprocesos no garantizan la Update
del segundo subproceso en lugar de Add
de nuevo, por lo que puede almacenar registros duplicados.
Este ejemplo fue probado y trabajado a sus expectativas:
Boat boat = new Boat // nullable fields omitted for brevity
{
boat_code = "HelloWorld",
id = 1,
name = "Fast Boat",
built = 1,
length = 100
};
using (BoatContext context = new BoatContext()) // or whatever your context is
{
context.Set<Boat>().AddOrUpdate(boat); // <-- IDBSet!!!
context.SaveChanges();
}
Si boat_code
el AddOrUpdate()
boat_code
el método AddOrUpdate()
agregará un nuevo registro. Si el boat_code
es ''HelloWorld'', se actualizará el registro existente. Creo que esto es lo que estás buscando...
¡Espero que esto ayude!