2009-06-12 10 views
0

Je suis aux prises avec Entity Framework lors de la création d'un nouvel enregistrement dans une relation un à plusieurs. J'ai les tableaux ci-dessous définies:Liaison d'entité dans Winforms - un à plusieurs

Person
PersonInternetAddresses
InternetAddresses

Entity Framework a créé la EntityObjects personne avec une propriété nommée navigation PersonInternetAddresses et InternetAddresses avec une propriété de navigation aux personnes.

Pour créer un nouvel enregistrement InternetAddresses j'ai créé un formulaire avec un couple de champs de texte et une source de liaison à InternetAddresses.

Sous mon « nouveau bouton » j'ai placé le code suivant:

internetAddressesBindingSource.AddNew();    
(internetAddressesBindingSource.Current as InternetAddresses).Id = Guid.NewGuid(); 
(internetAddressesBindingSource.Current as InternetAddresses).Persons = InternetAddresses.Persons; 

Sur la dernière ligne, je reçois l'erreur suivante:

The EntityCollection has already been initialized. The InitializeRelatedCollection method should only be called to initialize a new EntityCollection during deserialization of an object graph.

Je devine que je ne peut pas définir la personne à travers la propriété de navigation de InternetAddresses, ce qui signifierait que Entity Framework lui-même créerait un enregistrement PersonInternetAddresses. Comme il n'y a pas d'entité EntityObject de PersonsInternetAddresses dans le modèle, je suis plutôt bloqué!

Répondre

2

Trouvé!

Personnes est du type EntityCollection duh! Pour les tests j'ai changé le code en:

internetAddressesBindingSource.AddNew();    
     (internetAddressesBindingSource.Current as InternetAddresses).Id = Guid.NewGuid();    

     foreach(Person p in InternetAddresses.Persons) 
     { 
      (internetAddressesBindingSource.Current as InternetAddresses).Persons.Add(p); 
     } 
Questions connexes