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