Почему метод ExecuteFunction доступен только через base.ExecuteFunction в дочернем классе ObjectContext? - PullRequest
0 голосов
/ 08 июня 2010

Я пытаюсь вызвать ObjectContext.ExecuteFunction из моего объекта objectcontext в хранилище моего сайта.

Репозиторий является общим, поэтому у меня есть только объект 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);   
}

Спасибо,
Matt

1 Ответ

1 голос
/ 08 июня 2010

Вам не нужно использовать base.ExecuteFunction, метод ExecuteFunction (и перегрузки) являются публичными, не защищенными, поэтому вы можете вызывать их с внешних сайтов.У вас проблемы с вызовом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...