2012-05-30 2 views
7

vereinfacht ich den Code ein Weilchen zu debuggen versuchen:Das Mitglied mit Identität ‚‘ existiert nicht in der Metadatensammlung r nParameter Name:. Identität

[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();    
    } 

Die Werte entsprechend transmited werden. Tabelle Benutzer:

[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, 

CONSTRAINT [PK_ Benutzer _3213E83F0AD2A005] PRIMARY KEY CLUSTERED

ich alle Fremdschlüssel gelöscht sicher sein, dass nichts wirkt es. Ich bin mir sicher, dass es in einem früheren Moment funktioniert hat, aber jetzt kann ich nicht herausfinden, wo das Problem liegt. Es stürzt ab, während die Savechanges ausführen:

{"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

Warum Sie einen neuen Benutzer sind Instanziierung und die Eigenschaften einstellen? Sie können die nicht gebundenen Eigenschaften direkt auf das Modell einstellen? – VJAI

+0

versucht mit der folgenden Lösung (ohne ein neues Benutzerobjekt instanziiert), funktioniert aber nicht. –

+0

Hat das Benutzermodell eine Eigenschaften-ID? – VJAI

Antwort

7

Das Problem tritt aufgrund eines Auslösers wurde reproduzieren, die auf der Benutzer-Tabelle war. Es wurde entfernt und das Problem wird nicht mehr reproduziert.

0

Versuchen Sie, diese

[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

Ich bekomme immer noch den Fehler –

5

ich den gleichen Fehler hatte geworfen zu werden, wenn ich versuche, EF einfügen verwenden, war der Fehler

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

Es anfangs nicht klar war, war aber die Ausnahme Nachricht sehr prägnant, weil meine Datenbank der weiß, Spalte Id int, aber die Eigenschaft, die für das Objekt in meinem Code erstellt wurde, war int ID, also komme ich zurück zum benannten Mapping, ID ist nicht ID zugeordnet.

Wenn also ein Objekt mit der Eigenschaft ID an die Datenbank gesendet wird, die nur Id kennt, wird der obige Fehler angezeigt.

Ich hoffe, das hilft, dank

2

denke ich, dass die beste Lösung in this Post ist. Ich habe die 3. Option benutzt und funktioniert. Hier berichte ich die Antwort in dem 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

ich heute diese gleichen Fehler hatte und verbrachte ein paar frustrierenden Stunden versuche, es herauszufinden.

Ich verwendete Entity Framework, um einen Datensatz mit einer Identitätsspalte in eine SQL Server-Datenbanktabelle einzufügen. Einfach genug.

Die Tabelle hatte einen Trigger, der wiederum eine gespeicherte Prozedur führte. Die gespeicherte Prozedur hatte eine Linie darin:

select newid() 

Das ist die Linie, die Entity Framework brach.

Für Tabellen mit Identitätsspalten erwartet Entity Framework die Rückgabe einer einzelnen Zeile mit einem einzelnen Feld, bei dem es sich um die Identitätsspalte handelt.

3

Wahrscheinlich gibt es einen Trigger in der Tabelle, der aktualisiert wird, und die Ausgabe wird zurückgegeben. Die Ausgabe wird verworfen, aber sie steht in Konflikt mit EF.Eine solche Ausgabe wird oft zu debuggen Trigger verwendet (und vergessen löschen später):

select 'trigger called, i am here' 

oder kann es fehlt Variable:

select column 

statt

select @variable=column 
-1

Dies ist die erste Seite Google zurückgegeben, wenn ich nach einer Erklärung für meine Version eines Problems, das diese Fehlermeldung erzeugt, suchte, so werde ich es hier erwähnen, zusammen mit dem, was die Auflösung für mich war.

In meiner Version des Problems sah der problematischen Code wie folgt aus:

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

Ich erbte den Job zu erhalten und um die Anwendung zu unterstützen, die in ihm den Code hatte. Dieser Code setzt die Navigationseigenschaft auf die bereits verknüpfte Entität, wobei die zugehörige Fremdschlüsseleigenschaft des gleichen Objekts wie eine Suche verwendet wird. Das ist völlig unnötig, und erscheint manchmal .. nicht immer .. diesen Fehler erzeugen:

„Das Mitglied mit Identität‚Customization_ColorStyleCustomizations_Source‘existiert nicht in der Metadatensammlung Parametername:. Identity“

Das ist ein ziemlich Fehlermeldung, nicht wahr?

Seit zwei Jahren saß dieser Code dort, ohne irgendwelche Fehler zu werfen, dann plötzlich eines Tages begann es, diesen Fehler für bestimmte Farbstile zu produzieren. /Shake. Ich verstehe das nicht. Aber es ist nicht notwendig, und es zu lösen, löst das Problem, also. Nur für den Fall, dass jemand anderes mit dem gleichen allgemeinen Problem dabei auftritt, hier ist es.

(Falls war es nicht klar - in diesem Fall die Auflösung einfach war, den Code zu entfernen.)

Verwandte Themen