Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Mam tabelę tagów. Jak wstawić zbiorczo za pomocą LINQ?

LINQ to zapytanie technologia, ale myślę, że wiemy, co masz na myśli; możesz chcieć być nieco bardziej szczegółowy, niezależnie od tego, czy jest to LINQ-to-SQL, czy Entity Framework. Możesz również wyjaśnić, co oznacza "zbiorcze" w twoim przypadku... dla 10-100 rekordów możesz użyć innej odpowiedzi na 10 000 rekordów (gdzie SqlBulkCopy do tabeli pomostowej i procedura składowana do zaimportowania do bazy danych byłaby najlepszym pomysłem).

W przypadku stosunkowo małej liczby — po prostu użyj narzędzia ORM, aby znaleźć rekordy — na przykład za pomocą LINQ-to-SQL (być może z transakcją obejmującą serializowalną) — i użyj C# do ilustracji (zaktualizowane, aby pokazać pętlę i pamięć podręczną ):

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();

Właściwie, ze względu na wydajność zastanawiam się, czy może to być jedna z tych sytuacji, w których klucz naturalny ma sens - np. użyj Tag (varchar ) jako klucz podstawowy i zduplikuj go (jako klucz obcy) w VideoTags - wtedy nie musisz dołączać do Tags stół cały czas.

Jeśli liczby są większe, całkiem łatwo jest użyć SqlBulkCopy; po prostu umieść dane w DataTable i popchnij go, a następnie wykonaj pracę w TSQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bardzo wolno ładuje tabelę danych

  2. Audyt zmian danych w SQL Server 2008

  3. Przypadki użycia instrukcji MERGE programu SQL Server:synchronizowanie tabel online i historii

  4. Wybierz TSQL do tabeli Temp z dynamicznego sql

  5. Zmień typ danych kolumny na unikalny identyfikator z bigint