Элемент с идентификатором "" не существует в коллекции метаданных.rnParameter имя: идентификатор

Я немного упростил код, пытаясь отладить:

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

значения передаются соответственно. Таблица пользователей:

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

ОГРАНИЧЕНИЕ [PK_пользователи_3213E83F0AD2A005] КЛАСТЕРИЗОВАННЫЙ ПЕРВИЧНЫЙ КЛЮЧ

Я удалил все внешние ключи, чтобы убедиться, что ничего не влияет на него. Я совсем уверен, что в предыдущий момент он работал, но теперь я не могу понять, где проблема. Она падает при выполнении метод 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.rnParameter name: identity"}

8 ответов


проблема воспроизводилась из-за триггера, который был в таблице пользователей. Удалил его и проблема больше не воспроизводится.


у меня была такая же ошибка, когда я пытаюсь вставить с помощью EF, ошибка была

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

Это не очевидно сначала, но сообщение было очень кратким, потому что моя база данных в столбце Id int но свойство, созданное для объекта в моем коде, было int ID таким образом, возвращаясь к именованному сопоставлению, Id не сопоставляется с ID.

Итак, когда объект недвижимости ID отправляется в базу данных, знаю только Id вы получите выше ошибка.

надеюсь, это поможет, спасибо


вероятно, в обновляемой таблице есть триггер,и он возвращает вывод. Выход выбрасывается, но он конфликтует с EF. Такой вывод часто используется для отладки триггеров (и забыл удалить позже):

select 'trigger called, i am here'

или может отсутствовать переменная:

select column 

вместо

select @variable=column 

Я думаю, что лучшее решение находится в этой пост. Я использовал 3-й вариант и работает. Здесь я сообщаю ответ по ссылке:

проблема может быть связана с триггером" вместо вставки " на одном из ваш стол.

платформа EF выполняет проверку вставленной строки данных путем вызова функции scope_identity(). Однако триггер "вместо вставки" изменит контекст вставки таким образом, что EF системный вызов scope_identity вернет значение null.

несколько способов обойти это:

  1. используйте хранимую процедуру для вставки данных (не проверено )
  2. удалить вместо вставки триггера (триггеры могут вызвать другие проблемы, поэтому некоторые люди утверждают, что не использовать их) (протестировано, работает!)
  3. выключите проверку в EF framework, так: контекст.Конфигурация.ValidateOnSaveEnabled = false (проверено, работает!)

У меня была такая же ошибка сегодня и потратил несколько разочаровывающих часов, пытаясь понять это.

Я использовал Entity Framework для вставки записи со столбцом идентификатора в таблицу базы данных SQL server. Все очень просто.

в таблице был триггер, который, в свою очередь, запускал хранимую процедуру. В хранимой процедуре была строка:

select newid()

это строка, которая сломала Entity Framework.

для таблиц со столбцами идентификаторов Entity Framework ожидает, что будет возвращена одна строка с одним полем, которое является столбцом идентификатора.


попробуй такое

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

У меня была эта проблема и мое исправление, было то, что в моих метаданных строки подключения я не указал свою модель в .формат МСЛ.

Посмотреть подробнее


Это первая страница, которую Google вернул, когда я искал объяснение моей версии проблемы, которая создает это сообщение об ошибке, поэтому я упомяну об этом здесь, а также о том, какое разрешение было для меня.

в моей версии проблемы оскорбительный код выглядел так:

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

я унаследовал работу по обслуживанию и поддержке приложения, в котором был этот код. Этот код задает свойство navigation для уже связанного объекта, использование связанного свойства внешнего ключа того же объекта, что и поиск. В этом нет необходимости, и иногда кажется, что нет.. не всегда.. произведите эту ошибку:

"элемент с идентификатором "Customization_ColorStyleCustomizations_source" не существует в коллекции метаданных. Имя параметра: идентификатор"

это сообщение об ошибке, не так ли.

в течение двух лет этот код сидел там, не бросая никаких ошибок, а затем внезапно в один прекрасный день, он начал производить эту ошибку для определенных цветовых стилей. /трясти. Я этого не понимаю. Но это не обязательно, и вынимая его решает проблему, так что. На всякий случай, если кто-то еще с той же общей проблемой столкнется с этим, вот он.

(в случае, если это не было ясно - в этом случае разрешение было просто удалить код.)