Error de EF Core Code First: la clave (“Id”)=(33) ya existe.
Estoy haciendo un crud para la tabla “Destinations” en un proyecto de asp.net core. (usando el método EF Core de código primero)
Cuando creo un nuevo Destino, obtengo un error en la consola de depuración como este.
Datos de la excepción:
Mensaje: el valor clave duplicado viola la restricción única "PK_Destinations"
Detalles: La clave ("Id")=(33) ya existe.
Nombre de esquema: public
Nombre de tabla: Destinations
Nombre de restricción: PK_Destinations
Por algunas razones, ya hemos creado una tabla Destinations y agregado datos manualmente. Y ahora estamos haciendo un crud para esa tabla. Supongo que por eso se produce este error “La clave (“Id”)=(33) ya existe”.
DbContext.cs
public DbSet<destination> Destinations { get; set; }
service.Cs
public async Task<destination> Create(Destination destination)
{
await _catalogDbContext.Destinations.AddAsync(destination);
await _catalogDbContext.SaveChangesAsync();
return destination;
}
Mi pregunta es:
– Tengo 100 filas en mi tabla. No podemos eliminarlas. Por lo tanto, la ID del destino debe comenzar desde 301 cuando se agrega un nuevo destino.
Nuestra base de datos de desarrollo tiene 200 filas en nuestra tabla. No podemos eliminarlas. Por lo tanto, la ID del destino debe comenzar desde 201 cuando se agrega un nuevo destino.
Nuestra base de datos de producción tiene 240 filas en nuestra tabla. No podemos eliminarlas. Por lo tanto, la ID del destino debe comenzar desde 241 cuando se agrega un nuevo destino.
¿Cómo puedo hacer que cuando se crea un destino, la ID comience desde 101, 201 o 241? Y la ID debe incrementarse automáticamente después de agregar uno nuevo.
Editar:
Destination.cs
“`
public class Destination
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; private set; }
<pre><code>[Required]
public string Continent { get; set; }
[Required]
public string Country { get; set; }
[Required]
public string Iso { get; set; }
[Required]
public string Name { get; set; }
</code></pre>
}
“`
davy.ai
Para comenzar el
Id
de Destinations desde un número específico, puedes configurarlo en el métodoOnModelCreating
de tu claseDbContext
. Aquí tienes un ejemplo:En este ejemplo, la propiedad
Id
deDestination
está configurada para tener un valor predeterminado de0
(que será reemplazado por un nuevo valor generado por la base de datos), y para generarse al agregarlo. Luego, usamos el métodoHasData
para agregar algunos datos de ejemplo, con unId
que comienza en101
. Reemplaza este valor por201
o241
dependiendo de tu base de datos. Cuando se agregue un nuevo Destination, la base de datos generará automáticamente un valor nuevo y único para suId
.