LINQ-to-SQL vs procedury przechowywane? [zamknięte]

Rzuciłem okiem na post" Beginner 's Guide to LINQ" tutaj na StackOverflow (Beginners Guide to LINQ), ale miałem kolejne pytanie:

Mamy zamiar rozpocząć nowy projekt, w którym prawie wszystkie nasze operacje baz danych będą dość proste pobieranie danych (jest inny segment projektu, który już zapisuje dane). Większość naszych innych projektów do tej pory korzysta z procedur przechowywanych dla takich rzeczy. Jednak, chciałbym wykorzystać LINQ-to-SQL, jeśli to sprawia, że więcej sens.

Więc pytanie Jest Takie: do prostego pobierania danych, które podejście jest lepsze, LINQ-to-SQL czy stored procs? Jakieś konkretne " za " lub "przeciw"?

Dzięki.
Author: Community, 2008-08-18

23 answers

Niektóre zalety LINQ nad zębami:

  1. bezpieczeństwo typu : myślę, że wszyscy to rozumiemy.
  2. abstrakcja : jest to szczególnie prawdziwe w przypadku LINQ-to-Entities . Ta abstrakcja pozwala również frameworkowi dodać dodatkowe ulepszenia, które można łatwo wykorzystać. PLINQ jest przykładem dodawania obsługi wielowątkowej do LINQ. Zmiany w kodzie są minimalne, aby dodać tę obsługę. Byłoby znacznie trudniej zrobić ten dostęp do danych kod, który po prostu nazywa sprocks.
  3. Obsługa debugowania : mogę użyć dowolnego debuggera. NET do debugowania zapytań. Dzięki sprocks nie możesz łatwo debugować SQL, a doświadczenie jest w dużej mierze powiązane z dostawcą bazy danych (MS SQL Server zapewnia analizator zapytań, ale często to nie wystarczy).
  4. Vendor agnostic : LINQ działa z wieloma bazami danych i liczba obsługiwanych baz danych tylko wzrośnie. Sprocks nie zawsze są przenośne między bazami danych, również ze względu na różna składnia lub Obsługa funkcji (jeśli baza danych w ogóle obsługuje sprocks).
  5. Deployment: inni już o tym wspominali, ale łatwiej jest wdrożyć pojedynczy zespół niż zestaw zębatek. To również wiąże się z #4.
  6. Easier : nie musisz uczyć się T-SQL, aby uzyskać dostęp do danych, ani nie musisz uczyć się API dostępu do danych (np. ADO.NET) niezbędne do wywołania sprężyn. Jest to związane z #3 i # 4.

Niektóre wady LINQ vs sprocks:

  1. Network traffic : sprocks potrzebują jedynie serializacji nazwy sproc i danych argumentów nad przewodem, podczas gdy LINQ wysyła całe zapytanie. Może to być naprawdę złe, jeśli zapytania są bardzo złożone. Jednak abstrakcja LINQ pozwala Microsoftowi na poprawę tego z czasem.
  2. mniej elastyczny : Sprocks może w pełni wykorzystać możliwości bazy danych. LINQ wydaje się być bardziej ogólne w jego wsparcie. Jest to powszechne w każdym rodzaju abstrakcji języka (np. C # vs asembler).
  3. rekompilacja: jeśli chcesz wprowadzić zmiany w sposobie dostępu do danych, musisz przekompilować, wersję i ponownie wdrożyć swój zestaw. Sprocks możeczasami zezwolić DBA na dostrojenie procedury dostępu do danych bez konieczności ponownego wprowadzania czegokolwiek.

Bezpieczeństwo i łatwość zarządzania to coś, o co ludzie też się spierają.

  1. Bezpieczeństwo : na przykład możesz chronić poufne dane, ograniczając dostęp do tabel bezpośrednio i umieścić ACLs na Zębatki. Jednak w LINQ nadal możesz ograniczyć bezpośredni dostęp do tabel i zamiast tego umieścić ACL na updatable table views , Aby osiągnąć podobny koniec (zakładając, że Twoja baza danych obsługuje updatable views).
  2. Zarządzalność : korzystanie z widoków daje również zaletę ochrony aplikacji przed zmianami schematu (np. normalizacja tabeli). Możesz zaktualizować widok bez konieczności podawania kodu dostępu do danych zmiana.

Kiedyś byłem wielkim sprockiem, ale zaczynam skłaniać się w stronę LINQ jako lepszej alternatywy w ogóle. Jeśli są jakieś obszary, w których sprocks są wyraźnie lepsze, to prawdopodobnie nadal napiszę sproc, ale dostęp do niego za pomocą LINQ. :)

 181
Author: Chris Gillum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 20:04:51

Generalnie jestem zwolennikiem umieszczania wszystkiego w procedurach przechowywanych, ze wszystkich powodów, dla których DBAs od lat się brzęczy. W przypadku Linq, prawdą jest, że nie będzie różnicy w wydajności przy prostych zapytaniach CRUD.

Ale pamiętaj o kilku rzeczach przy podejmowaniu tej decyzji: używając dowolnych par ORM ściśle do swojego modelu danych. DBA nie ma swobody wprowadzania zmian w modelu danych bez zmuszania do zmiany skompilowanego kodu. Dzięki procedurom przechowywanym może ukryć tego rodzaju zmiany w pewnym stopniu, ponieważ lista parametrów i zestaw wyników zwróconych z procedury reprezentują jej kontrakt, a wnętrzności mogą być zmieniane, tak długo, jak długo kontrakt jest nadal spełniony.

A także, jeśli Linq jest używany do bardziej złożonych zapytań, dostrajanie bazy danych staje się znacznie trudniejszym zadaniem. Gdy procedura składowana działa wolno, DBA może całkowicie skupić się na kodzie w izolacji i ma wiele opcji, tylko tak, że umowa jest nadal usatysfakcjonowany, gdy skończy.

Widziałem wiele, wiele przypadków, w których poważne problemy w aplikacji były rozwiązywane przez zmiany schematu i kodu w procedurach składowanych bez żadnych zmian w wdrożonym, skompilowanym kodzie.

Może podejście hybrydowe byłoby miłe z Linq? Linq może być oczywiście używany do wywoływania procedur składowanych.

 73
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-10 15:40:11

Linq do Sql.

Sql server będzie buforować plany zapytań, więc nie ma zwiększenia wydajności dla sprocks.

Twoje wypowiedzi linq, z drugiej strony, będą logicznie częścią i przetestowane z Twoją aplikacją. Zębatki są zawsze nieco oddzielone i trudniejsze w utrzymaniu i testowaniu.

Gdybym teraz pracował nad nową aplikacją od zera, użyłbym tylko Linq, bez sprocks.

 64
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 12:46:04

Dla podstawowego pobierania danych bez wahania wybrałbym Linq.

Od przejścia na Linq znalazłem następujące zalety:

    Debugowanie mojego DAL nigdy nie było łatwiejsze.
  1. Bezpieczeństwo kompilacji, gdy zmienia się schemat jest bezcenne.
  2. wdrażanie jest łatwiejsze, ponieważ wszystko jest kompilowane do bibliotek DLL. koniec z zarządzaniem skryptami wdrażania.
  3. ponieważ Linq może obsługiwać wszystko, co implementuje interfejs IQueryable, będziesz w stanie używaj tej samej składni do odpytywania XML, obiektów i innych źródeł danych bez konieczności uczenia się nowej składni
 37
Author: lomaxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 13:08:31

LINQ wykona Cache procedury

Jeśli aplikacja używa LINQ do SQL, a zapytania wymagają użycia łańcuchów, które mogą mieć bardzo zmienną długość, pamięć podręczna procedury SQL Server zostanie przepełniona jedną wersją zapytania dla każdej możliwej długości łańcucha. Na przykład rozważ następujące bardzo proste zapytania utworzone przeciwko osobie.Tabela adresów w bazie danych AdventureWorks2008:

var p = 
    from n in x.AddressTypes 
    where n.Name == "Billing" 
    select n;

var p = 
    from n in x.AddressTypes 
    where n.Name == "Main Office" 
    select n;

Jeśli oba te zapytania zostaną uruchomione, zobaczymy dwa wpisy w pamięci podręcznej procedury SQL Server: jeden związany z NVARCHAR( 7), a drugi z nvarchar(11). Teraz wyobraź sobie, że istnieją setki lub tysiące różnych ciągów wejściowych, Wszystkie o różnych długościach. Bufor procedury zostałby niepotrzebnie wypełniony różnego rodzaju różnymi planami dla dokładnie tego samego zapytania.

Więcej tutaj: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=363290

 26
Author: SQLMenace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-21 23:29:14

Myślę, że argument pro LINQ wydaje się pochodzić od ludzi, którzy nie mają historii z rozwojem baz danych (w ogóle).

Szczególnie jeśli używasz produktu takiego jak vs DB Pro lub Team Suite, wiele argumentów tutaj nie ma zastosowania, na przykład:

Trudniejsze do utrzymania i przetestowania: VS zapewnia pełne sprawdzanie składni, sprawdzanie stylów, sprawdzanie referencji i ograniczeń i wiele innych. Zapewnia również pełne możliwości testowania jednostkowego i narzędzia do refaktoryzacji.

LINQ makes true testowanie jednostkowe niemożliwe, ponieważ (moim zdaniem) nie sprawdza się w kwasie.

Debugowanie jest łatwiejsze w LINQ: Dlaczego? VS pozwala na pełne wprowadzenie kodu zarządzanego i regularne debugowanie SPs.

Skompilowany w pojedynczą bibliotekę DLL zamiast skryptów wdrożeniowych: Po raz kolejny VS przychodzi na ratunek, gdzie może budować i wdrażać pełne bazy danych lub wprowadzać bezpieczne dla danych zmiany przyrostowe.

Nie musisz uczyć się TSQL z LINQ: Nie wiesz, ale musisz nauczyć się LINQ-gdzie jest korzyść?

Naprawdę nie postrzegam tego jako korzyści. Możliwość zmiany czegoś w izolacji może brzmieć dobrze w teorii, ale tylko dlatego, że zmiany spełniają kontrakt nie oznacza, że zwraca prawidłowe wyniki. Aby móc określić, jakie są poprawne wyniki, potrzebujesz kontekstu i uzyskasz ten kontekst z kodu wywołującego.

Um, luźno powiązane aplikacje są ostatecznym celem wszystkich dobrych programistów, ponieważ naprawdę zwiększają elastyczność. Możliwość zmiany rzeczy w izolacja jest fantastyczna i to twoje testy jednostkowe zapewnią, że nadal zwracają odpowiednie wyniki.

Zanim wszyscy się zdenerwujecie, myślę, że LINQ ma swoje miejsce i ma wspaniałą przyszłość. Ale w przypadku złożonych, wymagających dużej ilości danych aplikacji nie sądzę, aby była gotowa do zastąpienia procedur składowanych. To był pogląd, który powtórzył MVP w TechEd w tym roku (pozostaną bezimienni).

EDIT: po stronie procedury składowanej LINQ do SQL jest coś, co nadal muszę przeczytać więcej na-w zależności od tego co znajdę mogę zmienić moją powyższą diatrybę;)

 17
Author: Dr8k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-12 04:42:23

LINQ jest nowy i ma swoje miejsce. LINQ nie jest wymyślony, aby zastąpić procedurę składowaną.

Tutaj skupię się na niektórych mitów wydajności i minusach, tylko dla "LINQ do SQL", oczywiście mogę się całkowicie mylić; -)

(1)ludzie mówią, że statment LINQ może "buforować" w SQL server, więc nie traci wydajności. Częściowo prawda. "LINQ to SQL" jest w rzeczywistości runtime tłumaczącym składnię LINQ na statment TSQL. Więc z punktu widzenia wydajności,ciężko zakodowany ADO.NET instrukcja SQL nie ma różnicy niż LINQ.

(2)podany przykład, interfejs obsługi klienta ma funkcję "przelew konta". ta funkcja sama w sobie może zaktualizować tabele 10 DB i zwrócić niektóre wiadomości w jednym ujęciu. W LINQ musisz zbudować zestaw instrukcji i wysłać je jako jedną partię do SQL server. wydajność tej przetłumaczonej partii LINQ - > TSQL nie może się równać z procedurą składowaną. Powód? ponieważ możesz dostosować najmniejszą jednostkę instrukcji w procedurze przechowywanej za pomocą wbudowanego SQL profilera i wykonania plan tool, nie możesz tego zrobić w LINQ.

Chodzi o to, że gdy mówimy o pojedynczej tabeli DB i małym zestawie danych CRUD, LINQ jest tak szybki jak SP. Jednak w przypadku znacznie bardziej skomplikowanej logiki, procedura składowana jest bardziej wydajna.

(3) "LINQ to SQL" łatwo sprawia, że nowicjusze wprowadzają świnie wydajności. Każdy starszy facet z TSQL może Ci powiedzieć, kiedy nie używać kursora (zasadniczo nie powinieneś używać kursora w TSQL w większości przypadków). Z LINQ i uroczą pętlą "foreach" z query, tak łatwo jest nowicjusz do napisania takiego kodu:

foreach(Customer c in query)
{
  c.Country = "Wonder Land";
}
ctx.SubmitChanges();

Widać, że ten prosty, porządny kod jest tak atrakcyjny. Ale pod maską,. NET runtime po prostu przetłumaczyć to do partii aktualizacji. Jeśli jest tylko 500 linii, jest to 500 linii TSQL batch; jeśli jest milion linii, jest to hit. Oczywiście doświadczony użytkownik nie użyje tego sposobu do wykonania tej pracy, ale chodzi o to, że tak łatwo wpaść w ten sposób.

 17
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-03 05:40:53

Najlepszym kodem jest brak kodu, a w przypadku procedur przechowywanych musisz napisać przynajmniej część kodu w bazie danych i kodu w aplikacji , aby go wywołać, podczas gdy w przypadku LINQ to SQL lub LINQ to encji, nie musisz pisać żadnego dodatkowego kodu poza jakimkolwiek innym zapytaniem LINQ, poza tworzeniem instancji obiektu kontekstowego.

 12
Author: Mark Cidade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 12:45:13

LINQ zdecydowanie ma swoje miejsce w bazach danych specyficznych dla aplikacji oraz w małych firmach.

Ale w dużym przedsiębiorstwie, gdzie Centralne bazy danych służą jako centrum wspólnych danych dla wielu aplikacji, potrzebujemy abstrakcji. Musimy centralnie zarządzać bezpieczeństwem i pokazywać historie dostępu. Musimy być w stanie przeprowadzić analizę wpływu: jeśli wprowadzę niewielką zmianę w modelu danych, aby zaspokoić nowe potrzeby biznesowe, jakie zapytania należy zmienić i jakie aplikacje należy ponownie przetestować? Widoki i Procedury magazynowe mi to dają. Jeśli LINQ potrafi to wszystko zrobić, a nasi programiści będą bardziej produktywni, to z przyjemnością. czy ktoś ma doświadczenie w używaniu go w tego typu środowisku?

 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 14:43:53

DBA nie ma wolności wprowadzania zmian do modelu danych bez wymuszania aby zmienić skompilowany kod. Z procedur przechowywanych, można je ukryć rodzaju zmian do pewnego stopnia, ponieważ Lista parametrów i zestaw wyników) zwrócone z procedury reprezentują jego kontrakt, a wnętrzności mogą być zmienił się, tylko tak długo, jak to umowa jest nadal spełniona.

Nie uważam tego za korzyść. Możliwość zmiany czegoś w izolacji teoretycznie może brzmieć dobrze, ale to, że zmiany spełniają kontrakt nie oznacza, że zwraca prawidłowe wyniki. Aby móc określić, jakie są poprawne wyniki, potrzebujesz kontekstu i uzyskasz ten kontekst z kodu wywołującego.
 8
Author: lomaxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 14:28:23

IMHO, RAD = LINQ, RUP = przechowywane Procs. Przez wiele lat pracowałem dla dużej firmy z listy Fortune 500, na wielu poziomach, w tym w zarządzaniu, i szczerze mówiąc, nigdy nie zatrudniłbym programistów RUP do tworzenia RAD development. Są na tyle silni, że mają bardzo ograniczoną wiedzę o tym, co robić na innych poziomach procesu. W środowisku silosowym sensowne jest zapewnienie DBAs kontroli nad danymi za pośrednictwem bardzo specyficznych punktów wejścia, ponieważ inni szczerze mówiąc nie znają najlepszych sposobów na uzyskanie danych zarządzanie.

Ale duże przedsiębiorstwa poruszają się boleśnie powoli na arenie rozwoju, a to jest niezwykle kosztowne. Są chwile, kiedy trzeba działać szybciej, aby zaoszczędzić czas i pieniądze, a LINQ zapewnia to i więcej w pikach.

Czasami myślę, że DBAs są stronnicze wobec LINQ, ponieważ czują, że zagraża to ich bezpieczeństwu pracy. Ale taka jest natura bestii, panie i panowie.

 7
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 19:04:17

Myślę, że trzeba iść z procs do czegokolwiek prawdziwego.

A) zapisanie całej logiki w linq oznacza, że Twoja baza danych jest mniej użyteczna, ponieważ tylko Twoja aplikacja może ją wykorzystać.

B) nie jestem przekonany, czy modelowanie obiektowe jest lepsze od modelowania relacyjnego.

C) Testowanie i rozwijanie procedury składowanej w SQL jest o wiele szybsze niż cykl edycji kompilacji w dowolnym środowisku Visual Studio. Wystarczy edytować, F5 i nacisnąć wybierz i jesteś off do rasy.

D) łatwiej jest zarządzać i wdrażać procedury składowane niż zespoły.. wystarczy umieścić plik na serwerze i nacisnąć F5...

E) Linq do sql wciąż pisze gówniany kod, kiedy się go nie spodziewasz.

Szczerze mówiąc, myślę, że najlepszą rzeczą byłoby, aby MS rozszerzył t-sql tak, aby mógł on implikalnie wykonać projekcję join tak, jak robi to linq. t-sql powinien wiedzieć, czy chcesz zrobić porządek.lineitems.część, na przykład.

 6
Author: Todd Bandrowsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-08 16:35:56

LINQ nie zabrania stosowania procedur przechowywanych. Używałem trybu mieszanego z LINQ-SQL i LINQ-storedproc. Osobiście cieszę się, że nie muszę pisać zapisanych proc....pwet-tu.

 5
Author: kenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-28 12:39:55

Jest też problem z ewentualnym wycofaniem wersji 2.0. Zaufaj mi, zdarzyło mi się to kilka razy, więc jestem pewien, że zdarzyło się to innym.

Zgadzam się również, że abstrakcja jest najlepsza. Wraz z faktem, że pierwotnym celem każdego ORM jest sprawienie, aby RDBMS ładnie pasował do koncepcji OO. Jeśli jednak wszystko działało dobrze przed LINQ przez to, że musiałem trochę odbiegać od koncepcji OO, to wkręć je. Koncepcje i rzeczywistość nie zawsze pasują do siebie. Nie ma miejsca dla wojowniczych fanatyków w nim.

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 03:14:09

Zakładam, że masz na myśli Linq do Sql

Dla każdego polecenia CRUD łatwo jest profilować wydajność procedury składowanej w porównaniu z dowolną technologią. W takim przypadku różnica między nimi będzie znikoma. Spróbuj profilować obiekt pola 5 (typy proste) ponad 100 000 zapytań select, aby dowiedzieć się, czy istnieje prawdziwa różnica.

Z drugiej strony prawdziwym deal-breaker będzie pytanie, Czy czujesz się komfortowo umieszczając swoją logikę biznesową w bazie danych, czy nie, które jest argumentem przeciwko procedurom składowanym.

 3
Author: Jon Limjap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 12:44:12

Według Guru, LINQ definiuję jako motocykl, A SP jako samochód. Jeśli chcesz wybrać się na krótką wycieczkę i mieć tylko małych pasażerów(w tym przypadku 2), idź z wdziękiem z LINQ. Ale jeśli chcesz wybrać się w podróż i mieć duży zespół, myślę, że powinieneś wybrać SP.

Podsumowując, wybór pomiędzy motocyklem a samochodem zależy od trasy (działalności), długości (czasu) i pasażerów (danych).

Mam nadzieję, że to pomoże, mogę się mylić. : D

 3
Author: Kyaw Thura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 07:53:56

Wszystkie te odpowiedzi skłaniające się ku LINQ mówią głównie o łatwości rozwoju, która jest mniej lub bardziej związana ze słabą jakością kodowania lub lenistwem w kodowaniu. Tylko taki jestem.

Niektóre zalety lub Linq, czytam tutaj jako, łatwe do przetestowania, łatwe do debugowania itp, ale nie są one podłączone do końcowego wyjścia lub użytkownika końcowego. To zawsze będzie powodować problemy użytkownika końcowego na wydajność. Co punkt ładowanie wielu rzeczy w pamięci, a następnie stosowanie filtrów w użyciu LINQ?

Ponownie TypeSafety, jest ostrożność, że "jesteśmy ostrożni, aby uniknąć niewłaściwego typecastingu", który ponownie słaba jakość staramy się poprawić za pomocą linq. Nawet w takim przypadku, jeśli coś w bazie danych ulegnie zmianie, np. rozmiar kolumny String, to linq musi zostać ponownie skompilowane i bez tego nie będzie typesafe .. Próbowałem.

Chociaż okazało się, że jest dobry, słodki, interesujący itp podczas pracy z LINQ, ma wadę, że programista jest leniwy:) i udowodniono to 1000 razy że jest zły (może być najgorszy) pod względem wydajności w porównaniu do przechowywanych proc.

Przestań być leniwy. Bardzo się staram. :)

 3
Author: Manish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 21:36:30

Stored Procs vs Code (poprzednia dyskusja)

 2
Author: liammclennan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:02

W przypadku prostych operacji CRUD z jednym punktem dostępu do danych, powiedziałbym, że idź na LINQ, jeśli czujesz się komfortowo ze składnią. Dla bardziej skomplikowanej logiki myślę, że sprocks są bardziej efektywne pod względem wydajności, jeśli jesteś dobry w T-SQL i jego bardziej zaawansowanych operacji. Masz również pomoc od Tuning Advisor, SQL Server Profiler, debugowanie zapytań z SSMS itp.

 2
Author: Neo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-10 10:11:39

Procedura składowana ułatwia testowanie i można zmienić zapytanie bez dotykania kodu aplikacji. Również w przypadku linq uzyskanie danych nie oznacza, że są one odpowiednie. Testowanie poprawności danych oznacza uruchomienie aplikacji, ale z procedurą składowaną można ją łatwo przetestować bez dotykania aplikacji.

 2
Author: dansasu11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-24 09:38:09

Wynik można podsumować jako

LinqToSql dla małych stron i prototypów. To naprawdę oszczędza czas na Prototypowanie.

Sps : Uniwersalny. Mogę dostroić moje zapytania i zawsze sprawdzić ActualExecutionPlan / EstimatedExecutionPlan.

 1
Author: pokrate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-24 04:30:03
Create PROCEDURE userInfoProcedure
    -- Add the parameters for the stored procedure here
    @FirstName varchar,
    @LastName varchar
AS
BEGIN

    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT FirstName  , LastName,Age from UserInfo where FirstName=@FirstName
    and LastName=@FirstName
END
GO

Http://www.totaldotnet.com/Article/ShowArticle121_StoreProcBasic.aspx

 1
Author: totaldonet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 23:09:05

Zarówno LINQ jak i SQL mają swoje miejsca. Oba mają swoje wady i zalety.

Czasami do skomplikowanego pobierania danych może być potrzebny zapisany proc. Czasami możesz chcieć, aby inne osoby używały twojego zapisanego proc w Sql Server Management Studio.

Linq to Entities świetnie nadaje się do szybkiego rozwoju CRUD.

Oczywiście, że możesz zbudować aplikację używając tylko jednej lub drugiej. Albo możesz to pomieszać. Wszystko sprowadza się do Twoich wymagań. Ale SQL przechowywane procs nie odejdzie żadnych wkrótce.

 0
Author: live-love,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-12 15:34:50