-1

サイトのリポジトリにある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);   
}

ありがとう、
マット

4

1 に答える 1

1

base.ExecuteFunctionを使用する必要はありません。ExecuteFunctionメソッド(およびオーバーロード)はパブリックであり、保護されていないため、外部サイトから呼び出すことができます。あなたはそれを呼び出すのに問題がありますか?

于 2010-06-08T07:27:38.230 に答える