-1

我正在尝试从我站点存储库中的 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 */)
    }
 }

任何人都知道为什么我必须打电话ExecuteFunctionbase不是_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 回答