Элемент с идентификатором "" не существует в коллекции метаданных.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.
несколько способов обойти это:
- используйте хранимую процедуру для вставки данных (не проверено )
- удалить вместо вставки триггера (триггеры могут вызвать другие проблемы, поэтому некоторые люди утверждают, что не использовать их) (протестировано, работает!)
- выключите проверку в 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" не существует в коллекции метаданных. Имя параметра: идентификатор"
это сообщение об ошибке, не так ли.
в течение двух лет этот код сидел там, не бросая никаких ошибок, а затем внезапно в один прекрасный день, он начал производить эту ошибку для определенных цветовых стилей. /трясти. Я этого не понимаю. Но это не обязательно, и вынимая его решает проблему, так что. На всякий случай, если кто-то еще с той же общей проблемой столкнется с этим, вот он.
(в случае, если это не было ясно - в этом случае разрешение было просто удалить код.)