C#/PLINQO - отсоединить и повторно присоединить один и тот же объект к одному и тому же контексту

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

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

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

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

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

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

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

2 ответа

Решение

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

Попробуйте использовать 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();
Другие вопросы по тегам