Как вставить сущности с Linq To SQL, где я хочу указать их идентификаторы - например, предварительно заполненные таблицы при создании БД? - PullRequest
0 голосов
/ 06 января 2009

Я занимаюсь написанием продукта с использованием LinqToSql для доступа к данным. Пока мы быстро развиваемся, модель часто меняется. Это означает, что мы дампируем и перезагружаем базы данных во время разработки. Таким образом, накладные расходы каждый раз воссоздают базовые данные.

Процесс, который восстанавливает резервную копию БД, бесполезен, потому что нам нужно обновлять БД модели так же часто; такие же накладные расходы (я думаю, в любом случае).

Итак, я хочу использовать DataContext.CreateDatabase, а затем извлечь некоторые данные из файлов CSV. Хорошо. Но я также хотел бы уладить отношения, что означает, в идеале, зная, какие первичные ключи будут заранее (в противном случае, учитывая, что некоторые идентификаторы являются GUID, будет сложно зашить ссылки, которые мне нужны). 1005 *

Что эквивалентно SET IDENTITY_INSERT IdentityTable ON (и OFF) в Linq To SQL? Есть ли один?

1 Ответ

2 голосов
/ 09 января 2009

Вам не нужно знать первичные ключи заранее, вам нужно только знать отношения.

Предположим, вы хотите загрузить в Клиенты и Заказы, где у Клиента много заказов.

Сначала загрузите ваши клиенты из файла в память, используйте поддельное значение первичного ключа из файла для CustomerId (это значение будет заменено автоматически сгенерированным базой данных позже).

Dictionary<int, Customer> customers = LoadCustomersFromFile();

Во-вторых, загрузите ваши заказы из файла в память. использовать поддельное значение первичного ключа для OrderId. Повторно используйте эти поддельные CustomerIds для установления отношений. Добавьте заказы своим связанным клиентам.

Dictionary<int, Order> orders = LoadOrdersFromFile();
foreach(Order o in orders.Values)
{
  customers[o.CustomerId].Orders.Add(o);
}

После построения графа объектов, InsertOnSubmit всех объектов.

...