Linq to Sql, как проверить, находится ли данная таблица / класс в наборе изменений DataContext - PullRequest
2 голосов
/ 04 мая 2009

Я анализирую XML-файл, используя LinqToXSD. Я использую Linq to SQL для вставки элементов в XML в соответствующие таблицы в базе данных.

Я вставляю множество различных таблиц / элементов в DataContext, используя

DB.<tables>.InsertOnSubmit(table);

где таблицы могут быть любыми из примерно 75 различных таблиц.

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

Есть ли общий способ сделать это? То, как я делаю это сейчас, включает в себя написание кода для каждой из разных таблиц, что заставляет меня думать, что я могу каким-то образом извлечь метод и написать этот код только один раз.

Для анализа XML у меня есть метод для каждого элемента в xml, который соответствует таблице в базе данных. Следующие два метода обрабатывают xml-элементы разных типов.

 private static tbl_trackname ParseTrackName(TRACKNAMEType tRACKNAMEType)
    {
        tbl_trackname tableTrackName = new tbl_trackname();

        tableTrackName.code = tRACKNAMEType.code;
        tableTrackName.text = tRACKNAMEType.text;

        DB.tbl_tracknames.InsertOnSubmit(tableTrackName);
        return tableTrackName;
    }



 private static tbl_track ParseTrack(TRACKType tRACKType)
    {
        tbl_track tableTrack = new tbl_track();

        tableTrack.trackID = int.Parse(tRACKType.trackid);
        tableTrack.tbl_organisation = ParseOrganisation(tRACKType.organisation);
        tableTrack.tbl_trackname = ParseTrackName(tRACKType.trackname);
        tableTrack.tbl_nation = ParseNation(tRACKType.country);

        DB.tbl_tracks.InsertOnSubmit(tableTrack);
        return tableTrack;
    }

первый метод вставляет строки в таблицу с именем tbl_trackname, второй вставляет строки в таблицу с именем tbl_track.

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

1 Ответ

2 голосов
/ 04 мая 2009

Ну, вы могли бы что-то сделать с dataContext.GetChangeSet().Inserts.OfType<Foo>()? может быть что-то с Any или Contains на конце?

Можете ли вы привести больше примеров?

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