LINQ to Sql: вставить вместо обновления - PullRequest
2 голосов
/ 23 мая 2010

Я давно застрял с этими проблемами.

Все, что я пытаюсь сделать, это вставить строку в мою БД, если это новая информация - если не обновить существующую.

Я обновил много сущностей в своей жизни раньше - но что не так с этим кодом, мне не понятно (возможно, что-то довольно простое) Наверное, я не вижу дрова для деревьев ...

private Models.databaseDataContext db = new Models.databaseDataContext();

internal void StoreInformations(IEnumerable<EntityType> iEnumerable)
{
 foreach (EntityType item in iEnumerable)
 {
  EntityType type = db.EntityType.Where(t => t.Room == item.Room).FirstOrDefault();
  if (type == null)
  {
   db.EntityType.InsertOnSubmit(item);
  }
  else
  {
   type.Date = item.Date;
   type.LastUpdate = DateTime.Now();
   type.End = item.End;
  }       
 }
}

internal void Save()
{
 db.SubmitChanges();
}

Edit: только что проверил ChangeSet, обновлений нет только вставки. Сейчас я согласился с

foreach (EntityType item in iEnumerable)
{
    EntityType type = db.EntityType.Where(t => t.Room == item.Room).FirstOrDefault();
    if (type != null)
    {
        db.Exams.DeleteOnSubmit(type);
    }
    db.EntityType.InsertOnSubmit(item);
}

но я бы хотел сделать обновления и потерять эти ненужные операторы удаления.

Ответы [ 3 ]

0 голосов
/ 24 мая 2010

Интересно, возникают ли у вас проблемы из-за обсуждаемой здесь проблемы: Почему я не могу изменить элементы из linq IEnumerable в цикле for?

Один из способов проверить этобыло бы передать список EntityType вместо IEnumerable как таковой:

internal void StoreInformations(IList<EntityType> iEnumerable)
{
...
}
0 голосов
/ 01 июня 2010

Что ж, я понял, почему это не сработало так, как я ожидал.

function Stuff()
{    
    Wrapper x = new Wrapper();
    Type a = new Type();
    InsertType(a);
    x.Type = a;
    InsertOnSubmit(x);
}

function InsertType (Type a)
{
    InsertOnSubmit(a);
}

, поскольку буква a в x все еще такая же, a будет вставлена ​​во второй раз - она ​​все еще новая.Каким-то образом я подумал, что на них есть ссылки и, по сути, они совпадают.

Я не думал о том, почему это работает, когда я сначала удаляю старую запись.Не хочу больше тратить время на это.В новые миры (EF4 или NHibernate)!

0 голосов
/ 23 мая 2010

Разве вы не хотите item.Room вместо iEnumerable.Room?

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