LINQ adalah permintaan teknologi, tapi saya pikir kami tahu apa yang Anda maksud; Anda mungkin ingin sedikit lebih spesifik apakah ini LINQ-to-SQL atau Entity Framework. Anda mungkin juga ingin mengklarifikasi apa arti "massal" dalam kasus Anda... untuk 10-100 catatan, Anda mungkin menggunakan jawaban berbeda untuk 10.000 catatan (di mana SqlBulkCopy
ke dalam tabel pementasan dan prosedur tersimpan untuk mengimpor di db akan menjadi ide terbaik).
Untuk jumlah yang relatif rendah - cukup gunakan alat ORM Anda untuk menemukan catatan - misalnya dengan LINQ-to-SQL (mungkin dengan rentang transaksi serializable) - dan menggunakan C# untuk ilustrasi (diperbarui untuk menampilkan loop dan cache ):
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();
Sebenarnya, untuk alasan kinerja saya bertanya-tanya apakah ini mungkin salah satu kesempatan di mana kunci alami masuk akal - yaitu gunakan Tags
(varchar
) sebagai kunci utama, dan duplikat (sebagai kunci asing) di VideoTags
- maka Anda tidak perlu bergabung dengan Tags
meja sepanjang waktu.
Jika angkanya lebih besar, cukup mudah menggunakan SqlBulkCopy
; cukup masukkan data ke dalam DataTable
dan dorong, lalu lakukan pekerjaan di TSQL.