LINQ je dotaz technologie, ale myslím, že víme, co máte na mysli; možná budete chtít být trochu konkrétnější, zda se jedná o LINQ-to-SQL nebo Entity Framework. Možná budete chtít také objasnit, co ve vašem případě znamená „hromadné“... pro 10–100 záznamů můžete použít jinou odpověď na 10 000 záznamů (kde SqlBulkCopy
do pracovní tabulky a uložené procedury k importu do db by byl nejlepší nápad).
Pro relativně nízké číslo - stačí použít váš ORM nástroj k nalezení záznamů - například pomocí LINQ-to-SQL (možná s rozsáhlou serializovatelnou transakcí) - a pro ilustraci použít C# (aktualizováno pro zobrazení smyčky a mezipaměti silný> ):
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();
Vlastně z důvodů výkonu mě napadá, jestli to může být jedna z těch příležitostí, kdy přirozený klíč dává smysl – tj. použijte Tag
(varchar
) jako primární klíč a duplikujte jej (jako cizí klíč) v VideoTags
- pak se nemusíte připojovat k Tags
tabulky po celou dobu.
Pokud jsou čísla větší, je docela snadné použít SqlBulkCopy
; stačí vložit data do DataTable
a přesuňte jej a poté proveďte práci v TSQL.