では動作しません。私は正しくAddVideo
と呼ばれる関数にマップされたストアドプロシージャをインポートすることができましたが、この関数を実行すると、なぜそれができるのかわからないSystem.ArgumentException
例外がスローされます。ストアド・プロシージャは、私はOracleのストアドプロシージャを呼び出すしようとすると、私は問題を抱えているEntity Frameworkのデータベース - 最初のワークフロー
これは、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;
そして、これが私のマッピングされた機能である:
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);
}
そして、私はへのパラメータとして与えられた値を挿入するAddVideo
関数を呼び出す場所ですストアドプロシージャ:
class Program
{
static void Main(string[] args)
{
var dbContext = new VidzyDbContext();
dbContext.AddVideo("Gladiator", DateTime.Today, "Action");
}
}
私は誰かが私を解決するのを助けることを願っています問題。
私はOracleと0 EXPを持っていますが、小文字にごAddViedeo方法であなたのパラメータの名前を変更してみてください。 E、g、 "P_NAME" - > "p_name"これらはあなたのsprocのあなたのパラメータの名前です。 – tshoemake
あなたのプロシージャの名前は 'SP_ADD_VIDEO'であり、あなたの呼び出しには' AddVideo'があります。この行は次のように読んでください: 'return((IObjectContextAdapter)this).ObjectContext.ExecuteFunction(" SP_ADD_VIDEO "、p_NAMEParameter、p_RELEASE_DATEParameter、p_GENREParameter);' –