2010-03-08 3 views
0

Почему это постоянно меня прослушивает.Трудно обновить объект, созданный другим LINQ to SQL-контекстом

У меня есть сущность с несколькими ссылками, где я получаю из контекста, который я удаляю. Сделайте некоторые изменения и попробуйте SubmitChanges(). При вызове функции SubmitChanges() без .Attach(), похоже, просто ничего не делает. При использовании .Attach() я получаю Исключение:

Была предпринята попытка вставить или добавить объект, который не является новым, возможно, был загружен из другого DataContext. Это не поддерживается.

Любые идеи?

ответ

3

L2S очень придирчив в обновлении объекта, который пришел из другого контекста БД. Фактически, вы не можете этого сделать, если только вы не отделите его от контекста, из которого он пришел. Существует несколько разных способов отсоединения объекта. Один из них показан ниже. Этот код будет в вашем классе сущности.

public virtual void Detach() 
{ 
    PropertyChanging = null; 
    PropertyChanged = null; 
} 

В дополнение к этому вы также можете сериализовать свою сущность, используя сериализацию на основе WCF. Что-то вроде этого:

object ICloneable.Clone() 
    { 
     var serializer = new DataContractSerializer(GetType()); 
     using (var ms = new System.IO.MemoryStream()) 
     { 
      serializer.WriteObject(ms, this); 
      ms.Position = 0; 
      return serializer.ReadObject(ms); 
     } 
    } 
+0

Работала с внедрением ICloneable и использованием .Attach (newEntity, oldEntity). Thanx. Мне пришлось использовать параметр/serialization в sqlmetal. –

Смежные вопросы