По сути, у меня есть таблица, которая содержит несколько свойств для компании.Это «главная» таблица, и ее идентификатор используется во многих других таблицах.Я в основном нахожу их ID с помощью этого метода:
private Company currentcompany()
{
Company cuco = db.Companies.Single(x => x.username == User.Identity.Name);
return cuco;
}
Мне нужно дать пользователям возможность обновлять различные данные о себе, хранящиеся в этой таблице, что я сделал совершенно хорошо - однако я заметил большую дыру в безопасности!
Используя данные несанкционированного доступа в Firefox (и я представляю Фидлера / многих других), я мог бы легко изменить скрытый идентификатор и изменить сведения о других компаниях.
Чтобы остановить это, я добавил следующие строкидля действия изменения:
Company cuco = currentcompany();
if (company.id != cuco.id)
{
return Content("Security Error");
}
(FYI - Company
- это модель / POCO, представляющая компанию, а company
- это данные формы.)
После добавления этого,если я отредактирую идентификатор в данных формы, он будет работать должным образом и вызовет «Ошибка безопасности», однако, если ошибки не возникнет, и я продолжу, я получу ошибку в вопросе.
«Объект с таким же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом».
Я считаю, что это связано с тем, что EF каким-то образом обнаруживает и сохраняет данныеПервое извлечение данных, но я просто не уверен, как это исправить.
Любой совет?
edit- --update -
Если вы можете понять, что япытаюсь добиться, есть ли лучший способ обойти это?