Есть ли способ получить поддержку импорта функций при использовании DbContext Generator? - PullRequest
2 голосов
/ 18 апреля 2011

Я пытаюсь использовать новый объект Entity Framework 4.1 DbContext Generator, потому что он генерирует очень чистые классы POCO для всех объектов и использует API DbContext вместо API ObjectContext. Проблема, с которой я сталкиваюсь, заключается в том, что, по-видимому, нет способа отобразить «Импорт функций» в API DbContext (или, по крайней мере, с помощью генератора). Разве невозможно использовать хранимые процедуры для импорта функций с API-интерфейсом DBContext или я просто что-то не так делаю?

Спасибо

UPDATE Я думаю, что это возможно, но мне нужно выяснить, как получить базовый ObjectContext API DbContext, кто-нибудь знает, как это сделать, по крайней мере?

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Я продолжил этот подход:

  1. Создайте файл YourContext.Context1.cs (с помощью генератора DbContext)
  2. Добавьте это свойство в частичный класс для YourContext:

    /// <summary>
    /// Retrieve the underlying ObjectContext
    /// </summary>
    public ObjectContext ObjectContext
    {
      get
      {
          return ((IObjectContextAdapter)this).ObjectContext;
      }
    }
    
  3. Настройте свои SP в .edmx, используя функцию импорта

  4. Добавьте функцию для каждого из ваших SP вкласс YourContext, например

    public IEnumerable<SomeEntity> GetAllSomeEntities(Nullable<global::System.Int32> accountID)
    {
        ObjectParameter accountIDParameter;
        if (accountID.HasValue)
        {
            accountIDParameter = new ObjectParameter("accountID", accountID);
        }
        else
        {
            accountIDParameter = new ObjectParameter("accountID", typeof(global::System.Int32));
        }
    
        return this.ObjectContext.ExecuteFunction<SomeEntity>("GetAllSomeEntities", accountIDParameter);
    }
    
2 голосов
/ 18 апреля 2011

По крайней мере Code-First подход EF 4.1 не поддерживает сопоставление с хранимыми процедурами :

Code First не поддерживает сопоставление с хранимые процедуры. Тем не менее, вы можете вызывать хранимые процедуры напрямую используя ExecuteSqlCommand или SqlQuery. Например: context.Database.ExecuteSqlCommand ( "ВЫПОЛНИТЬ . [DBO] [GetAllProducts] ");.

Но, похоже, вы выбрали подход Модель-Сначала / База данных-Сначала. Я не знаю, есть ли решение. Можно предположить, что есть способ, поскольку сказано, что Code-First не поддерживает отображение SP.

И вы можете получить доступ к базовому ObjectContext из вашего dbContext экземпляра следующим образом:

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
...