LINQ является запрос технологии а, но я думаю, что мы знаем, что вы имеете в виду; вы можете быть более конкретным, будь то LINQ-to-SQL или Entity Framework. Вы также можете уточнить, что означает «объемный» в вашем случае ... для 10-100 записей вы можете использовать другой ответ для 10 000 записей (где SqlBulkCopy
в промежуточную таблицу, а хранимая процедура для импорта в db - это лучшая идея).
Для относительно небольшого числа - просто используйте инструмент ORM, чтобы найти записи - например, с LINQ-to-SQL (возможно, с помощью сериализуемой транзакции) - и с помощью C# для иллюстрации (обновлен для отображения цикла и кеша):
Dictionary<string,Tag> knownTags = new Dictionary<string,Tag>();
foreach(... your data ...) {
Tag tag;
if(!knownTags.TryGetValue(tagName, out tag)) {
tag = ctx.Tags.SingleOrDefault(t => t.Name == tagName);
if(tag == null) {
tag = new Tag { Name = tagName };
ctx.Tags.InsertOnSubmit(tag);
}
knownTags.Add(tagName, tag);
}
// insert video tag
}
ctx.SubmitChanges();
на самом деле, по причинам производительности Интересно, может ли это быть один из тех случаев, когда естественный ключ имеет смысл - то есть использовать Tag
(varchar
) в качестве первичного ключа, и дублировать его (как внешний ключ) в VideoTags
- тогда вам не нужно постоянно присоединяться к таблице.
Если номер больше, это очень простой в использовании SqlBulkCopy
; просто поместите данные в DataTable
и нажмите его, а затем выполните работу в TSQL.
Я использую LINQ-TO-SQL, и я хочу вставить 10-20 записей за раз. Вышеуказанный запрос вставляет одно значение за раз. Могу ли я вставить все 10-20 значений за один раз и по-прежнему получить TagID –
Вы можете использовать столько «InsertOnSubmit», сколько вам нужно. TagID не будет доступен до тех пор, пока вы не назовете 'SubmitChanges', но на самом деле он вам не нужен - вы должны дать объектам' VideoTag' соответствующий объект 'tag'. Конечно, с естественным ключом это не проблема. –
Обратите внимание, что вы можете захотеть кэшировать известные теги в локальном словаре - иначе вы можете сделать некоторые ненужные SQL-запросы. Я обновлю ... –