/ / Linq do SQL czy Linq do DataSet? - .net, linq, linq-to-sql, linq-to-dataset

Linq do SQL lub Linq do DataSet? - .net, linq, linq-sql, linq-to-dataset

Jestem nowy w świecie Linq i obecnie go badam. Zastanawiam się nad użyciem go w moim następnym projekcie, który dotyczy interakcji z bazą danych.

Z tego, co przeczytałem, uważam, że istnieją 2 różne sposoby interakcji z bazami danych:

  • Linq do SQL
  • Linq do DataSet

Teraz produkt, nad którym mam pracować, nie może polegać na typie bazy danych. Na przykład może zostać wdrożony z serwerem SQL / Oracle.

Teraz moje pytania to:

  1. Jeśli używam Linq do SQL, czy utknąłem tylko z serwerem SQL?
  2. Myślę, że mogę używać Linq do DataSet dla obu SQLserwer i wyrocznia. Ale czy coś stracę (łatwość programowania, wydajność, niezawodność itp.), Jeśli użyję Linq do DataSet dla serwera SQL (w porównaniu do offshore Linq do SQL).

Odpowiedzi:

11 dla odpowiedzi nr 1

Masz rację co do nr 1 - Linq do Sql będzie działać tylko z bazami danych SQL Server.

Jeśli chcesz, skorzystam z ADO Entity Frameworkmożliwość dostępu do różnych źródeł danych (przy użyciu różnych dostawców). Otrzymujesz podobną elastyczność w zakresie korzystania z jednostek podobnych do POCO i dość łatwo jest rozszerzyć ją na bardziej zaawansowane / złożone implementacje.

W moim obecnym projekcie używamy Linq do Sqli było dobrze, ale mieliśmy wiele problemów do rozwiązania. Czasami uważałem to za zbyt uproszczone pod względem rozszerzalności. Napisałem (lepszą) odpowiedź dotyczącą Linq na Sql i Entity Framework tutaj.

W odniesieniu do pytania nr 2 - nie jestem pewien czy djak wrócić do DataSets. IMHO są już przeszłością, ale mogą być przydatne, jeśli masz przyzwoity zestaw narzędzi ze specjalnymi elementami sterującymi (np. Infragistics). Uważam jednak, że ich koszty ogólne są zbyt drogie w przypadku szybkich systemów transakcyjnych. Implementacja nie ma połowy funkcjonalności Linq do Sql lub Entity Framework.


4 dla odpowiedzi nr 2

Aby odpowiedzieć na pierwsze pytanie: nie, istnieją inne implementacje dostawców linq dla Oracle, na przykład:

LinqToOracle

DbLinq

Ten ostatni obsługuje więcej baz danych, takich jak SqLite.

Również kasy ADO.NET Entity Framework.


3 dla odpowiedzi nr 3
  1. Tak, to tylko SQL Server. Dodatkowo Microsoft zamroził L2S i nie będzie go dalej doskonalić. Ale to dobry framework, działa naprawdę dobrze i jest łatwy w użyciu.
  2. Linq do DataSet uzyskuje dostęp do zbiorów danych jako wyliczeniapo pobraniu danych z bazy danych. Linq do SQL używa IQueriable do faktycznego budowania dynamicznych zapytań SQL. W wielu przypadkach L2S będzie działał znacznie lepiej i w ogóle nie będziesz musiał pisać kodu DB.

Powinieneś zajrzeć do Linq to Entities. To najbardziej rozbudowana dostępna platforma. W tej chwili dotyczy to głównie SQL Server, ale z czasem będzie dostępna obsługa Oracle itp.


2 dla odpowiedzi № 4
  1. Nie utkniesz tylko z serwerem SQL. Teoretycznie możesz zbudować dostawcę linq dla dowolnej bazy danych. Jest projekt dotyczący codeplex dla Linq do Oracle http://www.codeplex.com/LinqToOracle. Sam tego nie próbowałem.

  2. Jak dostaniesz dane do zestawu danych? Nie sądzę, że masz zamiar pobrać całą tabelę do zestawu danych? To byłby poważny problem z wydajnością. Jeśli zamierzasz użyć Linq do zbioru danych, musisz sam napisać wszystkie zapytania SQL, aby uzyskać dane z baza danych, zamiast pozwalać linq na tworzenie zapytań sql. Tak więc najpierw trzeba będzie wykonać zapytanie do bazy danych, a następnie do zestawu danych. Wydaje mi się, że podwójna praca ...


1 dla odpowiedzi nr 5

Gdy używasz Linqa do SQL, o ile wiem, utknąłeś z SQL Server.

Jeśli użyjesz Linq do DataSet, stracisz trochęłatwość programowania: dzięki Linq możesz bezpośrednio korzystać z encji Linq podczas korzystania z DataSets, musisz nadal używać nazwy DataSet (MyDataSet.Entity = new MyDataSet.Entity ()), która z czasem się zestarzeje. Myślę, że to jedyna ofiara.

Możesz jednak użyć go np. Oracle (zrobił to w projekcie). Jest również w zasadzie metodą „przeciągnij i upuść” z nieco większą kontrolą DataAdapter (o ile mi wiadomo - nigdy nie musiałem tak bardzo poprawiać Linq-SQL), możesz określić (np.) Które zapytania w użyciu itp.

Ponieważ nadal możesz zdefiniować relacje między tabelami w DataSets, nadal możesz używać Linq wystarczająco dobrze, więc naprawdę nie zobaczysz tam problemów.

Zakładam, że niezawodność jest tak dobra w przypadku Linq-to-DataSet, jak w Linq-to-SQL (nigdy nie miałem problemów), wydajność wydawała się być wystarczająco dobra, ale nigdy tak naprawdę nie była w stanie go profilować.


1 dla odpowiedzi № 6

Nie utkniesz tylko w SQL Server. Oferujemy implementacje LINQ do SQL dla serwerów Oracle, MySQL, PostgreSQL i SQLite. Zdobądź więcej informacji tutaj Zestawy danych nie są tak wygodne w porównaniu zTechnologia LINQ to SQL. Sprawdź opcję Entity Framework jako alternatywę. Jesteś w stanie napisać kilka modeli pamięci masowej za pomocą jednego modelu koncepcyjnego, a następnie równolegle korzystać z bazy danych SQL Server i Oracle.