2013-07-29 2 views
1

J'utilise la base de données Oracle 11g. De nombreuses tables créées dans la base de données et l'indexeur sont appliquées sur la clé primaire. Après cela, j'ai utilisé Entity Framework 5.0 pour se connecter à la base de données. Le problème est que, lorsque je sauvegarde un enregistrement dans une table, il n'envoie pas de clé primaire qui est une valeur auto incrémentée.Edmx ne retourne pas la valeur auto incrémentée

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

il renvoie ID = 0; Et encore une chose, tout en créant une colonne Integer dans Oracle, il montre décimal dans Entity Framework.

+0

Vous n'avez pas confondu GET et POST avez-vous? Si vous publiez alors vous pourriez manquer l'attribut HttpPost? –

+0

Ron, Merci pour la réponse. J'utilise webApi en mvc, donc si nous postons une méthode, il suffit de préfixer Post avant le nom de la méthode. AUCUN besoin de définir la méthode GET et Post séparément. Et je ne le pense pas, cela affecte la mise à jour d'edmx car elle enregistre des données dans la base de données. Et il devrait retourner la clé primaire. –

+0

Juste pour s'assurer que cette méthode est bien la méthode invoquée. Est-il spécifique à cette table? Est-ce que ça marche pour d'autres tables? –

Répondre

1

Je suppose que vous avez défini une séquence et un déclencheur dans la base de données Oracle qui fait l'incrément automatique de l'ID colonne, de sorte que seul l'objet dans le modèle EF n'est pas mis à jour, mais l'entrée réelle dans la base de données a la bonne valeur d'ID incrémentée, non?

Ensuite, le problème est que le modèle EDMX ne sait pas que la colonne est réellement une colonne ID où la valeur est générée dans la base de données. Vous devez éditer manuellement le modèle edmx. L'entrée de colonne correspondante dans la section SSDL doit avoir la propriété StoreGeneratedPattern définie sur "Identity". Cela indique au modèle de vérifier à nouveau la base de données après l'insertion pour rechercher la valeur d'ID générée. Cependant, chaque fois que vous mettez à jour le modèle à partir de la base de données, vos modifications manuelles sont perdues.

J'ai écrit un billet de blog court à son sujet: http://blog.aitgmbh.de/2014/06/02/patch-for-entity-framework-models-based-on-oracle-databases/

et moi avons créé un paquet NuGet qui fait tout pour vous chaque fois que vous générez le projet: http://bit.ly/1hbxIsO

De cette façon, même après la mise à jour de votre edmx modèle, la propriété Identité est à nouveau ajoutée aux colonnes d'ID spécifiées.

Questions connexes