2010-08-14 12 views
0

J'ai une relation de type un-à-plusieurs. (Ex. Une personne avec de nombreux numéros de téléphone). Dans ma requête obtenir j'ai this.ObjectContext.Person.Include("PhoneNumbers") et les méta-données générées, y compris public EntityCollection<PhoneNumbers> PhoneNumbers{ get; set; } J'ai également mis en place un DTO avec cela et d'autres propriétés dont j'ai besoin.Insérer une entité dans EntityCollection avec RIA

[Include] 
[Association("Name","thisKey","otherKey")] 
public IEnumerable<PhoneNumbers> PNums { get; set; } 

Je peux récupérer toutes les données bien, et l'afficher dans silverlight, mais quand je crée une nouvelle que je rencontrerai des problèmes. J'ai ce genre de chose se passe:

private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 

    if (dgMMs.SelectedItem != null) 
    { 
     PhoneNumbers wb = new PhoneNumbers(); 
     wb.this = tbThis.Text; 
     wb.that = tbThat.Text; 
     wb.other = tbOther.Text; 
     wb.whatnot = tbwhatnot.Text; 
     ((Person)dgMMs.SelectedItem).PNums.Add(wb); 
    } 
} 

Je reçois cette erreur lorsque vous appelez TDataSource.SubmitChanges();:

Message = "Submit operation failed validation. Please inspect Entity.ValidationErrors for each entity in EntitiesInError for more information."

D'accord, donc je l'ai fait, et bien sûr il y a une erreur, mais Je ne comprends pas très bien pourquoi. J'ai un champ non-nullable dans la base de données pour un champ last_modified_by que je n'ai pas défini quand je l'ai créé et ajouté à entityCollection, et je suppose que cela serait à l'origine, mais ma question vient de pourquoi RIA ne le fait pas appelle ma méthode d'insertion dans mon service que j'ai créé parce que je veux placer ce champ là. Comme si:

public void InsertPhoneNumber(PhoneNumbers pnum) 
{ 
    pnum.last_modified = DateTime.Today; 
    pnum.last_modified_by = Thread.CurrentPrincipal.Identity.Name; 
    if ((pnum.EntityState != EntityState.Detached)) 
    { 
     this.ObjectContext.ObjectStateManager.ChangeObjectState(pnum, EntityState.Added); 
    } 
    else 
    { 
     this.ObjectContext.PhoneNumbers.AddObject(pnum); 
    } 
} 

Mais c'est comme si RIA ajoute mon objet et appelle sa propre méthode d'insertion. Donc, je roulais avec dans un premier temps, et juste mis la propriété dans l'interface utilisateur, il me donnerait cette erreur:

Message = "Submit operation failed. An error occurred while updating the entries. See the inner exception for details. Inner exception message: Cannot insert explicit value for identity column in table 'iset_trkr_writeback' when IDENTITY_INSERT is set to OFF."

Je ne ai jamais mis le champ d'identité à quoi que ce soit, je pensais que l'AIR ferait pour moi . Mais quand je débogue et jette un oeil, il a un 0 pour la valeur. Mais au moins cette fois, il appelle ma méthode d'insertion dans mon service ... Peut-être que je manque un grand quelque chose pour mon processus, mais je pourrais vraiment utiliser de l'aide. Merci :)

Répondre

0

Vous utilisez Entity Framework? Si c'est le cas, vous avez besoin d'un attribut [Key] sur au moins un champ de vos métadonnées. Ou créez une colonne PK/identité (int/guid), puis mettez à jour les métadonnées.

+0

Merci rob, oui, tout ce que j'avais besoin de faire était de mettre à jour les métadonnées. X_x – Mike

Questions connexes