2012-08-17 3 views
3

j'ai écrit un programme de test simple qui accédera au modèle par défaut des ressources humaines sur un express Oracle en mode direct en utilisant DevArt dotConnect pour Oracle v 6.8.0.350.StoreGeneratedPattern ne fonctionne pas avec DevArt Entity Framework?

using (var ctx = new HREntities()) 
{ 
    var locNew = new LOCATION(); 
    locNew.CITY = "Magdeburg"; 
    ctx.LOCATIONs.AddObject(locNew); 
    ctx.SaveChanges(); 
    // will output 0; in database ID is generated 
    Console.WriteLine(locNew.LOCATIONID); 
} 

Comme vous pouvez le voir, je fais un insert dans le tableau LOCATION. Ici, j'ai ajouté un déclencheur:

create or replace 
trigger TRG_LOCATION_INS 
    before insert on "HR"."LOCATIONS" 
    for each row 
begin 
    if inserting then 
     select LOCATIONS_SEQ.nextval into :NEW."LOCATION_ID" from dual;  
    end if; 
end; 

La dernière étape se couchait StoreGeneratedPattern dans mon modèle à Identity (oui, je vérifié s'il est écrit dans le XML).

Si j'exécute l'application de test, l'enregistrement est créé et il a un nouveau LocationID valide. Mais dans EF le nouvel identifiant n'arrivera pas.

Pourquoi ne reconnaît-il pas l'ID généré? Si oui, qu'est-ce que ça veut dire: DevArt Blog

EDIT: Je l'ai testé dans différents scénarios maintenant:

  1. DevArt EntityModel en mode direct
  2. DevArt EntityModel avec OracleClient
  3. ADO.NET EntityModel avec OracleClient

Le résultat est le même. Non DSID est renvoyé sur SaveChanged. Comme autre résultat, si j'écris

ctx.Refresh(RefreshMode.ClientWins, log); 

un InvalidOperationException soulèvera en disant qu'il ya maintenant entité clé « 0 » qui est correct mais pas utile :-(.

Répondre

3

Si vous regardez dans le fichier .edmx vous voyez qu'il y a un schéma conceptuel et un schéma de stockage définis. Si vous modifiez le StoreGeneratedPattern dans le concepteur, il le modifiera uniquement dans le schéma conceptuel, mais pas dans le schéma de stockage, ce qui est vraiment nécessaire. Le StoreGeneratedPattern est dans le concepteur pour le premier développement de modèle, si vous générez la base de données à partir du modèle, sinon il n'a pas d'effet. Vous devez donc insérer manuellement l'attribut dans le schéma de stockage.

+0

Désolé, j'ai vu votre réponse trop tard. Merci. – sprinter252

+0

Cela a été corrigé Dans les versions plus récentes, je crois .. J'ai un. Edml et EntityFramework 6 – hanzolo

0

Après quelques tests, je pris un regard sur le XML de mon edml à nouveau et j'ai vu, que StoreGeneratedPattern n'est pas arrivé au XML Je ne sais pas, ce qui s'est passé parce que dans mon post initial j'ai écrit, que j'ai vérifié le XML. , l'attribut était là, mais pour ceux qui sont intéressés par la solution, regardez ici: Solution in other thread

+1

Je vois que vous avez trouvé la réponse vous-même. Je suis tombé sur le même problème récemment, donc j'étais presque sûr que c'est ce problème. – aKzenT

Questions connexes