2013-07-29 1 views
1

Я использую базу данных Oracle 11g. Многие таблицы, созданные в базе данных и индексаторе, применяются к первому ключу. После этого я использовал Entity Framework 5.0 для подключения к базе данных. Проблема в том, что когда я сохраняю любую запись в таблице, она не отправляет первичный ключ, который автоматически увеличивает значение.Edmx не возвращает автоматически увеличиваемое значение

public HttpResponseMessage PostCategory(TBLCATEGORY tblcategory) 
    { 
     if (ModelState.IsValid) 
     { 
      db.TBLCATEGORies.Add(tblcategory); 
      db.SaveChanges(); 
      int32 ID=tblcategory.ID; 
      return ID; 
     } 
    } 

он возвращает ID = 0; И еще одна вещь, создавая любой столбец Integer в oracle, он показывает десятичное число в Entity Framework.

+0

Вы не перепутали GET и POST? Если вы отправляете сообщение, возможно, вам не хватает атрибута HttpPost? –

+0

Рон, спасибо за ответ. Я использую webApi в mvc, поэтому, если мы отправляем какой-либо метод, нам нужно просто префикс Post перед именем метода. Нет необходимости отдельно определять методы GET и Post. И я так не думаю, что это влияет на edmx updation.because сохраняет данные в базе данных. И он должен вернуть первичный ключ. –

+0

Просто убедитесь, что этот метод действительно является методом, который вызывается. Конкретно для этой таблицы? Он работает для других таблиц? –

ответ

1

Я предполагаю, что вы определили последовательность и триггер в базе данных Oracle, который выполняет автоматическое увеличение идентификатора столбец, поэтому только объект в модели EF не обновляется, но фактическая запись в базе данных имеет правильное добавочное значение ID, правильно?

Тогда проблема в том, что модель edmx не знает, что столбец фактически является столбцом идентификатора, в котором значение генерируется в базе данных. Вы должны вручную отредактировать модель edmx. Соответствующая запись столбца в секции SSDL должна иметь свойство StoreGeneratedPattern, установленное на «Identity». Это говорит модели снова проверить базу данных после вставки для поиска сгенерированного значения ID. Однако каждый раз, когда вы обновляете модель из базы данных, ваши изменения вручную теряются.

Я написал короткий пост в блоге об этом: http://blog.aitgmbh.de/2014/06/02/patch-for-entity-framework-models-based-on-oracle-databases/

И я создал пакет NuGet, который делает все для вас, когда вы строите проект: http://bit.ly/1hbxIsO

Таким образом, даже после обновления EDMX модель, свойство Identity добавляется снова к указанным столбцам идентификатора.

Смежные вопросы