Как добавить в список с Linq to SQL? - PullRequest
2 голосов
/ 09 октября 2008

У меня есть таблица в базе данных, которую я извлекаю с помощью LINQ to SQL, и как часть своей обработки я хочу добавить в этот список, а затем обновить базу данных новыми элементами + все внесенные изменения .

Я думал, что смогу сделать следующее:

var list = (from item in db.Table
            select item).ToList();

[do processing where I modify items & add to the list]

list = list.Distinct();

db.SubmitChanges();

То, что происходит, состоит в том, что изменения произошли (то есть, обновления SQL), но любые новые элементы, которые я добавляю в список, не добавляются.

Очевидно, что я делаю это неправильно, как правильно изменить и добавить в список объектов БД, а затем зафиксировать все обновления и вставки?

Ответы [ 4 ]

5 голосов
/ 09 октября 2008

Список бессмысленный. Просто случается, что он содержит объекты, о которых знает DataContext. Нам нужно убедиться, что DataContext знает о новых. Важно то, что они не должны быть полными, когда мы сообщаем им DataContext:

Item item;
if (needNewOne)
{
     item = new Item();
     db.InsertOnSubmit(item);
}
else
{
     item = list[i];
}
///  build new or modify existing item
///   :
db.SubmitChanges();
3 голосов
/ 09 октября 2008

Вы можете создать для него метод расширения:

static void EnsureInsertedOnSubmit<TEntity>( this Table<TEntity>  table
                                            ,IEnumerable<TEntity> entities)
 { foreach(var entity in entities) 
    { if  (   table.GetModifiedMembers(entity).Length == 0     
           && table.GetOriginalEntityState(entity) == default(TEntity))
       { table.InsertOnSubmit(entity);
       }
    }
 }

И тогда вы можете сделать это:

 var list = db.Table1.ToList();
 list.Add(new Item());
 db.Table1.EnsureInsertedOnSubmit(list);
 db.SubmitChanges();
1 голос
/ 09 октября 2008

Вы должны указать LINQ вставить новую строку при отправке, используя InsertOnSubmit:

db.InsertOnSubmit(newrow);
db.SubmitChanges();

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

То же самое для удаления DeleteOnSubmit (строка). Тем не менее, изменения будут отслеживаться.

1 голос
/ 09 октября 2008

Вы должны добавить новые элементы через InsertOnSubmit.

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