C # / PLINQO - отсоединить и повторно присоединить один и тот же объект к одному и тому же контексту - PullRequest
2 голосов
/ 05 мая 2011

Я использую PLINQO для своего уровня данных LINQ-TO-SQL.

У меня есть следующий фрагмент кода (не настоящий код, просто чтобы воспроизвести полученную ошибку):

var context = new MyDataContext();
var user = context.User.GetByKey("username");
user.Detach();
context.User.Attach(user);

Выполнение последней строки кода приводит к InvalidOperationException со следующим сообщением об ошибке: «Не удается присоединить сущность, которая уже существует».

Я думал, что метод Detach должен отделить сущность от контекста, и кажется, что он просто удаляет ссылку с сущности на контекст, но контекст все еще «запоминает» сущность.

Как я могу полностью отсоединить объект, чтобы не получить ошибку?

Спасибо, Коби

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Я пришел к выводу, что мой дизайн был неправильным и не учитывал ограничения на linqtosql, я внес изменения в код, чтобы подобной ситуации не было, и если возникнет исключение.

0 голосов
/ 11 мая 2011

Попробуйте использовать ObjectStateManager с прикрепленной сущностью:

var context = new MyDataContext();
var user = context.User.GetByKey("username");
// change field values
...
user.AnyUserField = "123";
...
context.AcceptAllChanges();
context.ObjectStateManager.ChangeObjectState(user, EntityState.Added); // or use EntityState.Modified if it already exist anywhere
context.SaveChanges();
...