2010-06-08 91 views
-1

我想从我的网站的存储库中的我的objectcontext对象调用ObjectContext.ExecuteFunction。为什么ExecuteFunction方法只能通过ObjectContext的子类中的base.ExecuteFunction使用?

存储库是通用的,所以我拥有的只是一个ObjectContext对象,而不是实际上代表我从Entity Framework中获得的特定对象。

下面是生成使用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

您不必使用base.ExecuteFunction,ExecuteFunction来方法(和重载)是公开的,不保护,所以你可以从外部打电话给他们站点。调用它有困难吗?

+0

是的,功能没有显示出来。我举了一个我在我的问题中尝试过的例子。 – Matt 2010-06-08 23:27:46

相关问题