0

J'ai un problème lorsque j'essaie d'appeler une procédure stockée à partir d'Oracle. Je pourrais importer correctement la procédure stockée qui a été mappée à une fonction que j'ai appelée AddVideo, mais en exécutant cette fonction il jette une exception System.ArgumentException que je ne sais pas pourquoi il peut être.La procédure stockée à partir d'Oracle ne fonctionne pas avec le flux de travaux Entity Framework-first workflow

Ceci est ma procédure stockée dans Oracle:

create or replace procedure SP_ADD_VIDEO 
    (p_name in varchar2, p_release_date in date, p_genre in varchar2) 
is 
    genreId number; 
    maxVideoId number; 
begin 
    select G.ID into genreId 
    from GENRES G 
    where G.NAME = p_genre; 

    insert into VIDEOS(ID, NAME, RELEASEDATE) 
    values(SEQ_VIDEOS.NEXTVAL, p_name, p_release_date); 

    select MAX(V.ID) into maxVideoId 
    from VIDEOS V; 

    insert into VIDEOGENRES(VIDEOID,GENREID) 
    values(maxVideoId,genreId); 
end SP_ADD_VIDEO; 

Et ceci est ma fonction cartographiée:

public virtual int AddVideo(string p_NAME, Nullable<System.DateTime> p_RELEASE_DATE, string p_GENRE) 
{ 
    var p_NAMEParameter = p_NAME != null ? 
     new ObjectParameter("P_NAME", p_NAME) : 
     new ObjectParameter("P_NAME", typeof(string)); 

    var p_RELEASE_DATEParameter = p_RELEASE_DATE.HasValue ? 
     new ObjectParameter("P_RELEASE_DATE", p_RELEASE_DATE) : 
     new ObjectParameter("P_RELEASE_DATE", typeof(System.DateTime)); 

    var p_GENREParameter = p_GENRE != null ? 
     new ObjectParameter("P_GENRE", p_GENRE) : 
     new ObjectParameter("P_GENRE", typeof(string)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("AddVideo", p_NAMEParameter, p_RELEASE_DATEParameter, p_GENREParameter); 
} 

Et c'est là que j'appelle la fonction AddVideo pour insérer les valeurs données en paramètres dans la procédure stockée:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var dbContext = new VidzyDbContext(); 
     dbContext.AddVideo("Gladiator", DateTime.Today, "Action"); 
    } 
} 

J'espère que quelqu'un peut m'aider à résoudre ce problème problème.

+0

J'ai 0 exp avec oracle, mais essayez de renommer vos paramètres dans votre méthode AddViedeo en minuscules. E, g, "P_NAME" -> "p_name". Puisque ce sont les noms de vos paramètres dans votre sproc. – tshoemake

+0

Le nom de votre procédure est 'SP_ADD_VIDEO' et votre appel a' AddVideo', je crois que cette ligne devrait lire: 'return ((IObjectContextAdapter) this) .ObjectContext.ExecuteFunction (" SP_ADD_VIDEO ", p_NAMEParameter, p_RELEASE_DATEParameter, p_GENREParameter);' –

Répondre

0

Je ne sais pas si cela fonctionnerait pour Oracle, mais MSSQL, vous auriez à faire:

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction(
    "SP_ADD_VIDEO @P_NAME, @P_RELEASE_DATE, @P_GENRE", 
    p_NAMEParameter, p_RELEASE_DATEParameter, p_GENREParameter); 

Lorsque vous créez vos paramètres, CONTINUEZ ne pas mettre le @ lorsque vous faites new ObjectParameter... cependant. J'ai toujours mes noms de paramètres avec le même boîtier dans le code que dans la base de données, donc je ne suis pas sûr si vous devez ajuster en minuscules dans le code pour correspondre à la base de données ou non.