Невозможно вставить новую сущность Employee с помощью InsertOnSubmit () - PullRequest
3 голосов
/ 07 июля 2011

Я сталкиваюсь с этим исключением An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.когда я пытаюсь вставить новую сущность в свою таблицу сотрудников (основную).

Существует связь между основной таблицей сотрудников и подробной таблицей заказов, и я уверен, что связь между этими двумяТаблицы (и, в частности, Employee.Orders EntitySet) являются причиной проблемы, поскольку, когда я удалил отношение, он без проблем возвращается обратно для вставки в таблицу Employees.1006 * это сообщение в блоге , которое я пытался реализовать, но мой случай отличается от описанного в сообщении в блоге по следующим пунктам:

  • Он сталкивается с исключением при попытке обновления (покапопробуйте вставить).
  • Архитектура таблиц отличается.

как решить эту проблему?

Вот код вставки:

Employee emp = new Employee();
emp.Name = empName;    // empName is a local variable

// What should I default emp.Orders to?

dc.Employees.InsertOnSubmit(emp);
dc.SubmitChanges();

PS: Мой DataContext определен на уровне класса в моем хранилище, и возникает исключение, когда я вызываю dc.SubmitChanges();.и я не прикрепил какой-либо объект, почему он так говорит?

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Вот статья, объясняющая, что вам нужно делать, используя методы Attach и Detach: http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx

0 голосов
/ 15 июля 2011

Моя ставка на первичный ключ.

  • Вы уверены, что первичный ключ также установлен на auto increment?
  • Вы пытались изменить имя, тогда оно работает?
  • Что произойдет, если вы удалите все строки из вашей БД?Вы можете вставить один тогда?
0 голосов
/ 14 июля 2011

Я предполагаю, что он пытается сохранить что-то еще, кроме объекта работника, или вы не показываете полный код в своем хранилище. Когда вы создаете экземпляр своего объекта DataContext (dc), попробуйте установить DeferredLoadingEnabled = false и ObjectTrackingEnabled = false и посмотреть, работает ли он. Если это так, попробуйте просмотреть SQL-код в SQL Server Profiler и посмотреть, не изменяет ли он другие объекты, которые могли прийти из другого контекста, как говорится в сообщении.

var dc = new MyDataContext() 
{ 
    DeferredLoadingEnabled = false, 
    ObjectTrackingEnabled = false 
}; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...