Как заменить объект linq из вызова метода - PullRequest
0 голосов
/ 25 февраля 2009

У меня есть объект linq, который я хотел бы «удалить» при изменении определенных аспектов и при вызове метода Save(). База данных делает это, имея столбец Termination, который при установке вызывает игнорирование объекта в последующих запросах. Я хотел бы сделать это прозрачно, например:

DataContext db = new DataContext();
Foo bar = (from a in db.table
           where a.pk == somevalue
           select a).Single();

bar.Price += 2;
Console.WriteLine(bar.pk);
bar.Save();
Console.WriteLine(bar.pk);

Второй WriteLine() должен быть ключом, отличным от первого, потому что в процессе сохранения я создал дубликат объекта и заменил им бар. По сути внутри метода сохранения я хочу установить this = newObj;. Возможно ли то, что я хочу, или я поступаю неправильно?

Ответы [ 2 ]

1 голос
/ 25 февраля 2009

Вы можете изменить ссылки (или, точнее, переменные, которые их содержат), если они передаются по ссылке:

class Foo {
  ...
  public static void Save(ref Foo obj)
  {
    var newObj = obj._save() //your implementation
    obj = newObj;
  }
}

Нет другого способа изменить ссылки. Причина в том, что объекты не знают, где на них ссылаются. Объект Foo не знает ни о каких ссылках на него.

Если вам нужно точное поведение, которое вы обрисовали в своем коде, единственный способ добиться этого - изменить содержимое вашего экземпляра Foo, т. Е. Перезаписать каждое поле обновленными значениями.

Надеюсь, это поможет.

0 голосов
/ 25 февраля 2009

Альтернативой может быть возвращение нового объекта из метода Save (); Это, вероятно, имеет больше смысла, если метод Save () не является частью объекта. Так, например:

var dataPersister = new DataPersister();
var obj = dataPersister.Load(somevalue);
obj.Price += 2;
var newObj = dataPersister.Save(obj);

После этих вызовов obj все равно будет указывать на исходный объект, newObj будет результатом после сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...