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.
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
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);' –