Как я могу перенести временную таблицу, используя LINQ to SQL? - PullRequest
0 голосов
/ 01 июня 2011

У меня есть две таблицы: contacts и contact_temps.Таблица contact_temps отражает таблицу контактов.Я просто пытаюсь извлечь записи из временной таблицы и вставить их в контакты.После этого я удалю эти записи из таблицы contact_temps.

Приведенный ниже код переносит только одну запись и ничего не удаляет из временной таблицы.Как я могу исправить мою проблему?Спасибо.

            // migrate temp profile(s)...
            var tempProfilesToMigrate = from ct in db.contact_temps
                                         where ct.SessionKey == contact.Profile.SessionId
                                         select new contact();



            db.contacts.InsertAllOnSubmit(tempProfilesToMigrate);
            db.SubmitChanges();

            //...clear temp table records
            var tempProfilesToDelete = from ct in db.contact_temps
                                        where ct.SessionKey == contact.Profile.SessionId
                                        select ct;

            db.contact_temps.DeleteAllOnSubmit(tempProfilesToDelete);
            db.SubmitChanges();

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Интересно, не вызывает ли ваше «Вставить все при отправке» объекты, связанные с db.contacts.Попробуйте это.

// migrate temp profile(s)...
var tempProfiles = from ct in db.contact_temps
                             where ct.SessionKey == contact.Profile.SessionId
                             select ct;

foreach (var c in tempProfiles)
{
    Contact newC = new Contact();
    newC.Name = c.Name;
    // copy other values

    db.contacts.InsertOnSubmit(newC);
}

// WAIT! do it at once in a single TX => avoid db.SubmitChanges() here.

 db.contact_temps.DeleteAllOnSubmit(tempProfiles);

 // Both sets of changes in one Tx.
 db.SubmitChanges();

Вы также можете написать хранимый процесс и импортировать его в контекст БД и просто вызвать его.

0 голосов
/ 01 июня 2011

var result = db.ExecuteCommand ("вставить в список контактов select * from contacts_temp, где SessionKey = {0}", contact.Profile.SessionId);

Конечно, это не в моей голове, но вы поняли. Еще лучше было бы поместить перенос и удаление в хранимую процедуру. Метод, который вы используете, дважды обойдёт все записи contact_temp (один раз туда-сюда для вставки, один раз для удаления).

P.S. Google "сначала запишите хранимые процедуры" для способа вызова хранимых процедур с помощью EF 4.1

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