2011-12-15 15 views
6

sto cercando di eseguire un aggiornamento EF nel modo seguente ma continuare a ricevere questo errore:La proprietà EntityKey può essere impostata solo quando il valore corrente della proprietà è null

La proprietà EntityKey può essere solo imposta quando il valore corrente della proprietà è nullo.

 using (hydraEntities db = new hydraEntities()) 
     { 
      YouUser = db.youusers.Include("address").Include("entity").Include("youusercontacts.contact").Include("youuserlogins").Include("youusernotes.note").Include("youusernotes.youuser.entity").Where(yu => yu.YOUUserId.Equals(YOUUserId)).First(); 
     } 

      YouUser.entity.FirstName = txtFirstName.Text; 
      YouUser.entity.LastName = txtLastName.Text; 
      YouUser.address.AddressLine1 = txtAddressLine1.Text; 
      YouUser.address.AddressLine2 = txtAddressLine2.Text; 
      YouUser.address.City = txtCity.Text; 
      YouUser.address.State = ddlState.SelectedValue; 
      YouUser.address.Zipcode = txtZipcode.Text; 

      using (hydraEntities db = new hydraEntities()) 
      { 
       db.youusers.AddObject(YouUser); 
       db.ObjectStateManager.ChangeObjectState(YouUser, System.Data.EntityState.Modified); 
       db.SaveChanges(); 
      } 

apprezzo molto avere una visione chiara su come posso risolvere questo problema ed eseguire la dichiarazione di cui sopra.

risposta

10

Non utilizzare AddObject in questo scenario. È per l'inserimento di una nuova entità ma si sta aggiornando quella esistente. Utilizzare Attach invece:

using (hydraEntities db = new hydraEntities()) 
{ 
    db.youusers.Attach(YouUser); 
    db.ObjectStateManager.ChangeObjectState(YouUser, System.Data.EntityState.Modified); 
    db.SaveChanges(); 
} 
0

Nel mio scenario ero l'aggiunta di oggetti più volte in una volta attraverso diversi thread. Ho dovuto bloccare l'oggetto Model Container quando facevo questo, per assicurarmi che un solo oggetto venisse processato contemporaneamente.

Problemi correlati