为什么ExecuteFunction方法只能通过ObjectContext的子类中的base.ExecuteFunction来使用?

时间:2010-06-08 05:02:25

标签: asp.net-mvc entity-framework repository objectcontext

我正在尝试从我站点的存储库中的objectcontext对象调用ObjectContext.ExecuteFunction。

存储库是通用的,所以我只有一个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

另外,有没有办法像我写出来的那样做?我真的想保持我的存储库通用,但是由于必须执行存储过程,它看起来越来越难......

更新:这是我尝试过的,这个方法没有出现在intellisense中/当我尝试用它编译时它给我一个错误

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);   
}

谢谢,
马特

1 个答案:

答案 0 :(得分:1)

您不必使用base.ExecuteFunction,ExecuteFunction方法(和重载)是公共的,不受保护,因此您可以从外部站点调用它们。你在调用它时遇到了麻烦吗?