Entity Framework Core no puede agregar la Entidad pero puede Seleccionarla
Mi problema es:
Puedo seleccionar una entidad normalmente, pero cuando un intento de añadirla, estoy recibiendo la excepción:
ORA-06550: linha 3, coluna 22:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: linha 3, coluna 1:
PL/SQL: SQL Statement ignored
Context below:
Mi base de datos: Oracle
Propietario (esquema que tiene los datos): XXX
Usuario en conexión (usuario que tiene permisos para seleccionar, insertar, etc): Sí.
Estoy asegurando que los subsidios estén bien. Puedo insertar manualmente los datos.
Mi Entidad en mi API se declara como:
[Tabla("TABLE_NAME", Schema = "XXX")]
clase pública AnalyzeFeedback
IQueryable analyzeFeedbacks = dbContext.AnalyzeFeedbacks;
var query = (from u in analyzeFeedbacks
select u);
var sql = query.ToSql();
var result = query.FirstOrDefault();
Este selecto devuelve el primer registro de mi tabla. Perfectamente.
Cuando intento agregar un nuevo disco:
Insertar problema: Excepción en SaveChanges
dbContext.AnalyzeFeedbacks.Add(feedback);
dbContext.SaveChanges();
En "SaveChanges" es cuando estoy recibiendo el error.
Lo siento si no estoy lo suficientemente claro en mi explicación.
Pregunta hecha hace 3 años, 5 meses, 4 días - Por binarybrainiac
3 Respuestas:
-
También AnalyzeFeedback tiene propiedades de referencia/campos
Este es exactamente mi problema hombre, gracias.
Mi entidad tiene una propiedad que no etiqueta correctamente:
[ForeignKey("AnalyzeId")] public Analyze Analyze { get; set; } [NotMapped] <<< this! public List
Basements { get; set; } Cuando un etiquetado como "NoMapped", el inserto oculto como se esperaba.
¡Gracias por tu respuesta Gullard!
Respondida el Dec 18, 2020 a las 14:19 - por byteninja
Votos positivos: 0 | Votos negativos: 0 -
El error que estás recibiendo indica que la tabla o vista que estás intentando modificar no existe en la base de datos Oracle. Esto puede deberse a que la entidad
AnalyzeFeedback
no está correctamente mapeada a la tabla correspondiente en la base de datos.Para solucionar este problema, asegúrate de revisar lo siguiente:
- Verifica que la tabla en la base de datos Oracle tenga el nombre y el esquema correctos que estás especificando en la anotación `[Table("TABLE_NAME", Schema = "XXX")]`.
- Asegúrate de que la entidad `AnalyzeFeedback` esté configurada correctamente en tu modelo de Entity Framework Core, con todas las propiedades mapeadas adecuadamente a las columnas de la tabla.
- Comprueba que la conexión a la base de datos se esté estableciendo correctamente y que el usuario tenga los permisos necesarios para modificar la tabla en cuestión.
Si todo está configurado correctamente y sigues experimentando el error, puedes intentar lo siguiente:
- Verificar si hay errores de migraciones pendientes que puedan estar afectando la estructura de la base de datos.
- Revisar los logs de Oracle para obtener más información sobre el error específico que está ocurriendo al intentar realizar la inserción.
Espero que estos consejos te ayuden a resolver el problema y puedas realizar la inserción de la entidad
AnalyzeFeedback
correctamente en tu base de datos Oracle. Si necesitas más ayuda, no dudes en preguntar.Respondida el Dec 19, 2020 a las 14:18 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Problema:
Entity Framework Core no puede insertar una entidad en una tabla de Oracle debido a un error de "tabla o vista no existe".
Solución:
1. Verificar permisos:
Asegúrate de que el usuario de la conexión a la base de datos tenga permisos suficientes para insertar datos en la tabla.
2. Verificar el esquema:
Verifica que el esquema especificado en el atributo
[Tabla]
exista en la base de datos.3. Verificar la sintaxis:
Revisa cuidadosamente la sintaxis de la consulta de inserción y asegúrate de que el nombre de la tabla y el esquema sean correctos.
4. Habilitar procedimientos almacenados:
Si estás utilizando Entity Framework Core con Oracle, asegúrate de haber habilitado el uso de procedimientos almacenados en el contexto de la base de datos. Puedes hacer esto agregando la siguiente línea a tu código de configuración del contexto:
modelBuilder.UseOracleSQLCompatibility(OracleSQLCompatibilityMode.Process);
Ejemplo de código actualizado:
csharp using Microsoft.EntityFrameworkCore; namespace YourNamespace { public class MyDbContext : DbContext { public DbSet
AnalyzeFeedbacks { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseOracleSQLCompatibility(OracleSQLCompatibilityMode.Process); optionsBuilder.UseOracle("connection string"); } } } 5. Utilizar un procedimiento almacenado:
Si los pasos anteriores no resuelven el problema, considera utilizar un procedimiento almacenado para insertar datos en la tabla. Esto puede evitar problemas relacionados con los permisos y la sintaxis de las consultas.
Ejemplo de procedimiento almacenado:
sql CREATE OR REPLACE PROCEDURE INSERT_ANALYZEFEEDBACK( FEEDBACK_ID IN NUMBER, USER_ID IN NUMBER, FEEDBACK_TEXT IN VARCHAR2) AS BEGIN INSERT INTO TABLE_NAME (FEEDBACK_ID, USER_ID, FEEDBACK_TEXT) VALUES (FEEDBACK_ID, USER_ID, FEEDBACK_TEXT); END;
Ejemplo de código de inserción usando un procedimiento almacenado:
csharp using System.Data.Common; namespace YourNamespace { public class AnalyzeFeedbackService { private readonly MyDbContext _dbContext; public AnalyzeFeedbackService(MyDbContext dbContext) { _dbContext = dbContext; } public void InsertFeedback(AnalyzeFeedback feedback) { using (DbCommand cmd = _dbContext.Database.GetDbConnection().CreateCommand()) { cmd.CommandText = "INSERT_ANALYZEFEEDBACK"; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Add(new OracleParameter("FEEDBACK_ID", feedback.FeedbackId)); cmd.Parameters.Add(new OracleParameter("USER_ID", feedback.UserId)); cmd.Parameters.Add(new OracleParameter("FEEDBACK_TEXT", feedback.FeedbackText)); cmd.ExecuteNonQuery(); } } } }
Respondida el Dec 19, 2020 a las 14:30 - por Gemini
Votos positivos: 0 | Votos negativos: 0