サイトのリポジトリにあるobjectcontextオブジェクトからObjectContext.ExecuteFunctionを呼び出そうとしています。
リポジトリは汎用であるため、私が持っているのは、Entity Frameworkからの特定のオブジェクトを実際に表すオブジェクトではなく、ObjectContextオブジェクトだけです。
ExecuteFunctionメソッドを使用して生成されたコードの例を次に示します。
[global::System.CodeDom.Compiler.GeneratedCode("System.Data.Entity.Design.EntityClassGenerator", "4.0.0.0")]
public global::System.Data.Objects.ObjectResult<ArtistSearchVariation> FindSearchVariation(string source)
{
global::System.Data.Objects.ObjectParameter sourceParameter;
if ((source != null))
{
sourceParameter = new global::System.Data.Objects.ObjectParameter("Source", source);
}
else
{
sourceParameter = new global::System.Data.Objects.ObjectParameter("Source", typeof(string));
}
return base.ExecuteFunction<ArtistSearchVariation>("FindSearchVariation", sourceParameter);
}
でもやりたいのはこんな感じ…
public class Repository<E, C> : IRepository<E, C>, IDisposable
where E : EntityObject
where C : ObjectContext
{
private readonly C _ctx;
// ...
public ObjectResult<E> ExecuteFunction(string functionName, params[])
{
// Create object parameters
return _ctx.ExecuteFunction<E>(functionName, /* parameters */)
}
}
なぜ私が代わりに電話ExecuteFunction
しなければならないのか誰もが知っていますか?base
_ctx
また、私が書いたようなことをする方法はありますか?リポジトリを汎用的に保ちたいのですが、ストアドプロシージャを実行する必要があるため、ますます難しくなっています...
更新:これが私が試したものですが、メソッドがインテリセンスに表示されません/それを使用してコンパイルしようとするとエラーが発生します
public ArtistSearchVariation findSearchVariation(string source)
{
System.Data.Objects.ObjextContext _ctx = new ObjectContext(/* connection string */);
System.Data.Objects.ObjectParameter sourceParam = new ObjectParameter("Source", source);
return _ctx.ExecuteFunction<ArtistSearchVariation>("FindSearchVariation", sourceParam);
}
ありがとう、
マット