una - ¿Cómo obtener el siguiente valor de secuencia de Oracle en.NET Entity Framework?
secuencia alfanumerica oracle (1)
Tengo un método de publicación de API que inserta una nueva fila en mi tabla en mi base de datos Oracle. Tengo problemas con la clave principal de la tabla, que es un valor de secuencia. ¿Cómo hago my_primary_key_seq.nextval
en Entity Framework? Actualmente, este código funciona, pero violará la restricción única de PK cuando se inserte una nueva fila a través de nuestro formulario web .net antiguo, que utiliza la siguiente secuencia de valor como la siguiente clave principal.
decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1;
item.PPID = nextPK;
context.FORMPPs.Add(item);
int result = context.SaveChanges();
Tuve el mismo problema y lo resolví con la ayuda de este sitio y Oracle. Supongo que está utilizando Database First, ya que mencionó que otra aplicación heredada usa la misma base de datos.
Hay algunas cosas que tengo que hacer. Como mencionó Daniel Gabriel, si permite que Oracle administre la identidad, no necesita llamar a la secuencia para averiguar el número, la base de datos se encarga de eso. Pero hacer que eso funcione fue un poco complicado porque es posible que deba realizar un montón de cambios en la base de datos.
Cree la secuencia (ya ha hecho esto) en la columna de identidad.
Crea un disparador para llamar automáticamente a la secuencia en insertar. http://www.oracle-base.com/articles/misc/autonumber-and-identity.php
Altere su modelo de Entity Framework. Estaba usando EF Database First, y encontré este artículo que explicaba que necesitaba modificar el modelo para establecer la propiedad de la columna de identidad de la tabla.
StoreGeneratedPattern="Identity"
La entidad Oracle en el marco de la entidad VS no actualiza la clave primaria en el código
- Pero no me gustó el hecho de que tuve que volver a agregar este cambio cada vez que actualicé mi modelo EF de la base de datos. Haga doble clic en el archivo .edmx, luego ubique su tabla en el diagrama de la base de datos, resalte la columna de identidad en el diagrama y, en la ventana de propiedades, cambie el valor StoreGeneratedPattern a Identity. Eso debería hacer que persista incluso cuando actualice su modelo EF.