2013-07-29 59 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; 還有一件事,當在Oracle中創建任何列整數時,它將在實體框架中顯示小數。

+0

你還沒有搞混GET和POST有嗎?如果你發佈,那麼你可能會錯過HttpPost屬性? –

+0

羅恩,謝謝你的回答。 我在mvc中使用webApi,所以如果我們發佈任何方法,我們只需要在方法名稱前加Post即可。無需分別定義GET和Post方法。我不這麼認爲,它會影響edmx更新,因爲它將數據保存在數據庫中。它應該返回主鍵。 –

+0

只是爲了確保該方法確實是被調用的方法。 這是特定的表嗎?它是否適用於其他表格? –

回答

1

我假設你已經定義了一個序列並在Oracle數據庫中執行自動增加ID的觸發器列,因此只有EF模型中的對象不會更新,但數據庫中的實際條目具有正確的遞增ID值,對嗎?

然後問題是,edmx模型不知道該列實際上是在數據庫中生成值的ID列。您必須手動編輯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屬性再次添加到指定的ID列。