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();