Обновление объектов LINQ
От: Ziggi111 Россия  
Дата: 21.10.08 11:36
Оценка:
Ситуация. есть DataContext.
В нём два набора

public System.Data.Linq.Table<class1> class1s;
public System.Data.Linq.Table<class2> class2s;
таблица class2 в базе ссылается на таблицу class1. соответственно в class1 присутствует
EntitySet<class2> class2es.

ну а теперь проблема
пользователь надобавлял в class2es несколько строк. но потом передумал и решил отменить изменения. каким образом можно скопом перегрузить все class2es? мне к сожалению в голову приходит только что-то типа

foreach (class1 cl1 in class1s){
   cl1.class2es.Clear();
   cl1.class2es = class2s.Where (w => w.idclass1 = cl1.idclass1);
}


может этого вообще делать не нужно, может у меня моск зашорен работой через DataSet + Ado. В общем подскажитье плз. как поступить...
Re: Обновление объектов LINQ
От: Ziggi111 Россия  
Дата: 22.10.08 08:11
Оценка:
Такое впечатление что аббревиатура LINQ у всех здесь вызывает стойкое отвращение
Re: Обновление объектов LINQ
От: Lloyd Россия  
Дата: 22.10.08 08:47
Оценка:
Здравствуйте, Ziggi111, Вы писали:

Z>ну а теперь проблема

Z>пользователь надобавлял в class2es несколько строк. но потом передумал и решил отменить изменения.

Можно из Table-а вытащить оригинальное значение Entity
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: Обновление объектов LINQ
От: Ziggi111 Россия  
Дата: 22.10.08 09:18
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Ziggi111, Вы писали:


Z>>ну а теперь проблема

Z>>пользователь надобавлял в class2es несколько строк. но потом передумал и решил отменить изменения.

L>Можно из Table-а вытащить оригинальное значение Entity


Не понял при чём тут оригинальное значение.

void Run (){
   AddMethod ();
   CancelChanges ();
   // Вот тут хочу видеть оригинальные данные, в которых
   class1 row = DataContext1.class1s.where(w.idclass1 == 1).Single();
   IEnumerable ww = row.class2es.Where(w=>w.idclass2 == 15 || w.idclass2 == 16); // тут должно быть пусто
}
void AddMethod (){
   class1 row = DataContext1.class1s.where(w.idclass1 == 1).Single();
   row.class2es.Add (new class2(idclass2 = 15, name = "Запись1"));
   row.class2es.Add (new class2(idclass2 = 16, name = "Запись2");
}
void CancelChanges (){
   DataContext1.Refresh (RefreshMode.OverwriteCurrentValues, class1s);
   DataContext1.Refresh (RefreshMode.OverwriteCurrentValues, class2s);
// А вот дальше непонятно
}
Re[3]: Обновление объектов LINQ
От: Lloyd Россия  
Дата: 22.10.08 09:20
Оценка:
Здравствуйте, Ziggi111, Вы писали:
L>>Можно из Table-а вытащить оригинальное значение Entity

Z>Не понял при чём тут оригинальное значение.


Сорри, видимо не понял что ты хочешь.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[4]: Обновление объектов LINQ
От: Ziggi111 Россия  
Дата: 22.10.08 09:41
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Ziggi111, Вы писали:

L>>>Можно из Table-а вытащить оригинальное значение Entity

Z>>Не понял при чём тут оригинальное значение.


L>Сорри, видимо не понял что ты хочешь.


Ну может есть какие-то решения как это реализовать? ибо ну как-то совсем не весело бежать по всем элементам главной таблицы и перезагружать подчинённые наборы
Re: Обновление объектов LINQ
От: Ziggi111 Россия  
Дата: 22.10.08 13:01
Оценка:
Здравствуйте, Ziggi111, Вы писали:

Z>Ситуация. есть DataContext.

Z>В нём два набора

Z>public System.Data.Linq.Table<class1> class1s;

Z>public System.Data.Linq.Table<class2> class2s;
Z>таблица class2 в базе ссылается на таблицу class1. соответственно в class1 присутствует
Z>EntitySet<class2> class2es.

Z>ну а теперь проблема

Z>пользователь надобавлял в class2es несколько строк. но потом передумал и решил отменить изменения. каким образом можно скопом перегрузить все class2es? мне к сожалению в голову приходит только что-то типа

Z>
Z>foreach (class1 cl1 in class1s){
Z>   cl1.class2es.Clear();
Z>   cl1.class2es = class2s.Where (w => w.idclass1 = cl1.idclass1);
Z>}
Z>


Z>может этого вообще делать не нужно, может у меня моск зашорен работой через DataSet + Ado. В общем подскажитье плз. как поступить...


Нашёл вариант, но осталось одно "НО"

var cs = this.GetChangeSet ();
var removed = cs.Inserts.Where (w => w.GetType () == typeof (sourceinfo));
foreach (sourceinfo row in removed) 
   row.sourceinfogroup.sourceinfos.Remove (row);


А "НО" заключается в том, что при такой конструкции объект не исчезает из Inserted и не попадает в Deleted. Поэтому пришлось сделать так.

var cs = this.GetChangeSet ();
var removed = cs.Inserts.Where (w => w.GetType () == typeof (sourceinfo));
foreach (sourceinfo row in removed) {
    if (row.sourceinfogroups != null)
       row.sourceinfogroup.sourceinfos.Remove (row);
}


Кривовато мне кажется. Может кто знает почему объект не исчезает из Inserted и не попадает в Deleted?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.