LINQ是查詢技術,但我認爲我們知道你的意思;您可能想要更具體一點,無論這是LINQ-to-SQL還是實體框架。您可能還想澄清在您的案例中「散裝」的含義......對於10-100條記錄,您可能對10,000條記錄使用了不同的答案(其中SqlBulkCopy
放入臨時表和存儲過程以便在db處導入將是最好的主意)。
對於相對較低的號碼 - 只用你的ORM工具來查找記錄 - 例如使用LINQ到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
- 那麼你不需要一直加入Tags
表。
如果數字是較大的,這是很容易使用SqlBulkCopy
;只需將數據放入DataTable
並推送,然後在TSQL中完成工作。
我正在使用LINQ-TO-SQL,我想一次插入10-20條記錄。上面的查詢一次插入一個值。我可以一次插入所有10-20個值,但仍可以檢索TagID – 2009-06-28 08:02:40