2010-12-07 36 views
0
using (EntitiesContainer db = new EntitiesContainer()) 
{ 
    Language language = db.Languages.SingleOrDefault(x => x.Culture == _session.Language); 
    Language language2 = new Language { Id = action.Language.Id }; 
    Operation operation = new Operation { Id = action.Operation.Id }; 
    //Operation operation = db.Operations.SingleOrDefault(x => x.Id == action.Operation.Id); 

    if (!language.Id.Equals(language2.Id)) 
    { 
     db.Languages.Attach(language2); 
     action.Language = language2; 
    } 
    else 
    { 
     action.Language = language; 
    } 

    db.Operations.Attach(operation); 

    //db.ObjectStateManager.ChangeObjectState(operation, System.Data.EntityState.Unchanged); 

    action.Operation = operation; 
    //operation.Internals.Add(action); 

    action.CurrentDetail.Language = language; 
    action.CurrentDetail.Id = Guid.NewGuid(); 

    action.Id = Guid.NewGuid(); 

    db.SaveChanges(); 
} 

alt text alt textEF 4 entité d'insertion en relation avec l'entité existante

Bonjour I Try tout ce scénario dans le commentaire, pour lier mon opération existante à l'action interne qui a hérité d'une action .. mais dans l'un des ce scénario, il me jette une erreur comme il veut insérer une nouvelle opération dans le DB (dbo.Operations peut accepter "Action" valeur NULL) mais l'entité existe déjà .. Quelqu'un peut-il s'il vous plaît, donnez-moi la règle d'or .. insérer une entité avec relation .. existante ou non dans EF. Ça me rend fou!

Cordialement, Julien.

Répondre

0

Si je vous comprends bien (que vous essayez de mettre à jour une relation), vous pouvez utiliser la technique de talon :

Language lang = new Language { Id = action.language_id }; // create stub with ID 
db.Languages.Attach(lang); // attach stub to graph 
action.language = lang; // update relationship 
db.SaveChanges(); 
+0

Salut RPM1984, je vais essayer .. vous comprends bien, mais je veux insérer une entité avec une relation existante existant pour ne pas mettre à jour une entité existante – Julien

+0

Merci par le chemin – Julien

+0

@Julien - pas de problèmes. Le "talon" est une relation existante. Vous avez juste besoin de créer un talon pour cela basé sur l'ID (que vous devriez savoir), l'attacher au graphique, puis mettre à jour la relation. Dites-moi comment vous allez. Le code de votre exemple est assez compliqué. Il est donc difficile de déterminer quelle entité doit être mise à jour. Peut-être que si vous screencapped la partie pertinente de votre EDMX, ce serait plus clair. – RPM1984