2012-05-30 7 views
7

ja uproszczony kod trochę podczas próby debugowania:Człon z tożsamością „” nie istnieje w zbiorze metadanych r nParameter nazwa. Tożsamość

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

Wartości są odpowiednio transmited. Tabela użytkowników:

[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_ użytkowników _3213E83F0AD2A005] PRIMARY KEY CLUSTERED

Usunąłem wszystkie klucze obce, aby mieć pewność, że nic nie dotyka go. Jestem pewien, że w poprzedniej chwili działało, ale teraz nie wiem, gdzie jest problem. To awarii podczas wykonywania 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

Dlaczego jesteś uruchamianiu nowego użytkownika i ustawienie właściwości? Możesz bezpośrednio ustawić właściwości niezwiązane do modelu w prawo? – VJAI

+0

próbował użyć poniższego rozwiązania (bez tworzenia instancji nowego obiektu użytkownika), ale nie działa. –

+0

Czy model użytkownika ma identyfikator właściwości? – VJAI

Odpowiedz

7

Emisja została reprodukcji ze względu na spuście, który był na stole użytkowników. Usunięto, a problem nie jest już odtwarzany.

0

Spróbuj

[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

Nadal dostaję błąd –

5

Miałem ten sam błąd jest wyrzucane, gdy próbuję wstawić przy użyciu EF, błąd był

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

To nie było oczywiste, ale w pierwszym komunikat Wyjątkiem była bardzo zwięzła, ponieważ moja baza wie kolumna Id int, ale właściwość utworzona dla obiektu w moim kodzie była int ID, więc powracając do nazwanego mapowania, identyfikator nie jest odwzorowany na identyfikator.

Więc gdy obiekt o własności ID jest wysyłane do bazy danych, która tylko wiedzieć Id otrzymasz powyższy błąd.

Mam nadzieję, że to pomaga, dzięki

2

Myślę, że najlepszym rozwiązaniem jest w this postu. Użyłem trzeciej opcji i działa. Tutaj zgłosić odpowiedź w linku:

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

miałem ten sam błąd dzisiaj i spędził kilka godzin frustrujące próbuje to rozgryźć.

Użyłem Entity Framework do wstawienia rekordu z kolumną tożsamości do tabeli bazy danych serwera SQL. Wystarczająco proste.

Na stole był spust, który z kolei uruchomił procedurę przechowywaną. Procedura przechowywana miała wiersz:

select newid() 

To jest linia, która złamała Entity Framework.

W przypadku tabel z kolumnami tożsamości Entity Framework oczekuje na zwrócenie pojedynczego wiersza z pojedynczym polem, które jest kolumną tożsamości.

3

Prawdopodobnie wyzwalacz na tabeli jest aktualizowany i zwraca dane wyjściowe. Wynik jest odrzucany, ale pozostaje w konflikcie z EF.Wyjście takie jest często używany do wyzwalaczy debugowania (i zapomniał usunąć później):

select 'trigger called, i am here' 

lub nie może być brakuje zmienna:

select column 

zamiast

select @variable=column 
-1

To pierwszy strona Google zwróciło się, gdy szukałem wyjaśnienia dla mojej wersji problemu, który generuje ten komunikat o błędzie, więc wspomnę o tym tutaj, wraz z tym, co było dla mnie rozwiązaniem.

W mojej wersji problemu, kod naruszającym przepisy wyglądał następująco:

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

odziedziczyłem zadanie utrzymanie i dołączone do wniosku, że miał ten kod w nim. Ten kod ustawia właściwość nawigacji na już powiązanym obiekcie, używając powiązanej właściwości klucza obcego tego samego obiektu, co wyszukiwanie. To zupełnie niepotrzebne, i wydaje się czasami .. nie zawsze .. produkować ten błąd:

„Państwa z tożsamością«Customization_ColorStyleCustomizations_Source»nie istnieje w zbiorze metadanych nazwa parametru. Tożsamość”

To dość komunikat o błędzie, czyż nie?

Przez dwa lata ten kod znajdował się bez żadnych błędów, a następnie nagle, pewnego dnia, zaczął wywoływać ten błąd dla niektórych stylów kolorów. /potrząsnąć. Nie rozumiem tego. Ale to nie jest konieczne, a wyjęcie go rozwiązuje problem, więc. Na wszelki wypadek, tak się składa, że ​​dzieje się tak z kimś, kto ma taki sam ogólny problem.

(W przypadku nie było jasne - w tym przypadku rozdzielczości po prostu usunąć kod.)