2012-05-30 8 views
7

ho semplificato il codice un po 'durante il tentativo di eseguire il debug:Il membro con l'identità '' non esiste nella raccolta di metadati r nParameter nome:. Identità

[HttpPost] 
    public ActionResult Register(User model) 
    { 
     DateTime bla = new DateTime(2012, 12, 12); 
     try 
     { 
      User user = new User 
      { 
       gid = 1, 
       cid = 1, 
       firstName = model.firstName, 
       lastName = model.lastName, 
       email = model.email, 
       username = model.username, 
       password = model.password, 
       creationDate = bla, 
       active = 1 
      }; 
      myContext.Users.AddObject(user); 
      myContext.SaveChanges(); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

     return View();    
    } 

I valori sono transmited conseguenza. tabella utenti:

[id] [int] IDENTITY(1,1) NOT NULL, 
[cid] [int] NULL, 
[gid] [int] NULL, 
[firstName] [nvarchar](100) NOT NULL, 
[lastName] [nvarchar](100) NOT NULL, 
[email] [nvarchar](max) NOT NULL, 
[username] [nvarchar](100) NOT NULL, 
[password] [nvarchar](100) NOT NULL, 
[creationDate] [datetime] NOT NULL, 
[active] [int] NOT NULL, 

VINCOLO [PK_ utenti _3213E83F0AD2A005] PRIMARY KEY cluster

ho cancellato tutte le chiavi esterne per essere sicuri che nulla colpisce esso. Sono sicuro che in un momento precedente funzionava, ma ora non riesco a capire dove si trovi. Si blocca durante l'esecuzione delle SaveChanges:

{"An error occurred while updating the entries. See the inner exception for details."} 
{"The member with identity '' does not exist in the metadata collection.\r\nParameter name: identity"} 
+0

perché si sta un'istanza di un nuovo utente e l'impostazione delle proprietà? È possibile impostare direttamente le proprietà non vincolate al modello giusto? – VJAI

+0

provato a utilizzare la soluzione di seguito (senza creare un'istanza di un nuovo oggetto Utente) ma non funziona. –

+0

Il modello utente ha un ID proprietà? – VJAI

risposta

7

La questione è stata riproducendo a causa di un trigger che era sul tavolo degli utenti. Rimosso e il problema non si sta più riproducendo.

0

Prova questa

[HttpPost] 
public ActionResult Register(User model) 
{ 
    DateTime bla = new DateTime(2012, 12, 12); 
    try 
    { 
     model.gid = 1; 
     model.cid = 1; 
     model.creationDate = bla; 
     model.active = 1; 

     myContext.Users.AddObject(model); 
     myContext.SaveChanges(); 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
     throw; 
    } 

    return View();    
} 
+0

Ricevo ancora l'errore –

5

Ho avuto lo stesso errore di essere buttato quando provo ad inserire utilizzando EF, l'errore è stato

The member with identity 'Id' does not exist in the metadata collection.\r\nParameter name: identity

Non era evidente in un primo momento, ma il messaggio di eccezione è stato molto conciso, perché il mio database conosce il colonna Id int ma la proprietà creata per l'oggetto sul mio codice era int ID quindi, tornando alla mappatura denominata, l'ID non è mappato all'ID.

Così quando un oggetto con proprietà ID viene inviato al database che conosce solo Id, si otterrà l'errore sopra riportato.

Spero che questo aiuta, grazie

2

credo che la soluzione migliore è in this posta. Ho usato la terza opzione e funziona. Qui di seguito riporto la risposta nel link:

The issue could be related to a "instead of insert" trigger on one of your tables.

The EF framework is performing validation on the inserted row of data by calling scope_identity(). However, an "instead of insert" trigger will change the context of the insertion in such a way that the EF system's call to scope_identity will return null.

A couple ways around this:

  1. Use a stored procedure to insert the data (not tested)
  2. Remove the instead of insert trigger (triggers can cause other problems, so some people argue not to use them) (tested, works!)
  3. Turn off validation in the EF framework, so: context.Configuration.ValidateOnSaveEnabled = false (tested, works!)
1

Ho avuto questo stesso errore oggi e ha trascorso un paio d'ore frustrante cercare di capirlo.

Stavo usando Entity Framework per inserire un record con una colonna Identity in una tabella di database del server SQL. Abbastanza semplice

La tabella ha un trigger su di esso che a sua volta ha eseguito una stored procedure. La stored procedure conteneva una riga:

select newid() 

Questa è la riga che ha infranto Entity Framework.

Per le tabelle con colonne Identity, Entity Framework prevede di restituire una singola riga con un singolo campo che corrisponde alla colonna Identity.

3

Probabilmente c'è un trigger sulla tabella che viene aggiornato e restituisce l'output. L'output viene gettato via ma è in conflitto con EF.Tale uscita è spesso usato per i trigger di debug (e dimenticato di cancellare in seguito):

select 'trigger called, i am here' 

o non ci può essere variabile mancante:

select column 

invece di

select @variable=column 
-1

Questa è la prima pagina Google restituito quando ho cercato una spiegazione per la mia versione di un problema che produce questo messaggio di errore, quindi ne parlerò qui, insieme a ciò che la risoluzione è stata per me.

Nella mia versione del problema, il codice incriminato si presentava così:

foreach (var comp in colorstyle.Companions) 
     comp.LinkCS = db.ColorStyles.Find(comp.LinkColorStyleId); 

ho ereditato il compito di mantenere e sostenere l'applicazione che ha avuto questo codice in esso. Questo codice sta impostando la proprietà di navigazione sull'entità già correlata, utilizzando la proprietà chiave esterna associata dello stesso oggetto di una ricerca. Questo è completamente inutile, e sembra a volte .. non sempre .. produrre questo errore:

"Il socio con l'identità 'Customization_ColorStyleCustomizations_Source' non esiste nella raccolta di metadati Nome di parametro:. Identità"

Questo è piuttosto un messaggio di errore, non è vero?

Per due anni, questo codice è rimasto senza errori, quindi all'improvviso un giorno ha iniziato a produrre questo errore per alcuni stili di colore./Tremare. Non lo capisco. Ma non è necessario, e portarlo fuori risolve il problema, quindi. Nel caso in cui qualcun altro con lo stesso problema generale si verifica in tutto questo, eccolo qui.

(Nel caso in cui non era chiaro - in questo caso la risoluzione era semplicemente quello di rimuovere il codice.)

Problemi correlati