2010-06-08 18 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

相關問題