2009-12-14 19 views
5

Im na zaprojektowanie mojego Data Access dla nowego rozwiązania, które tworzę. To rozwiązanie zawiera jednak aplikację Compact Framework Device i biblioteki oprócz Desktop. Wszystkie .NET 3.5. Pulpit poradzi sobie z każdym dostępem do danych. Potrzebuję danych w CF, Desktop będzie komunikował się z SQL, a następnie z Mobile i poda odpowiednie dane ...LINQ To SQL In Compact Framework

Uwielbiam LINQ, a jeszcze bardziej uwielbiam LINQ 2 SQL. Jest dużo szumu i nie kupuję wewnętrznej polityki Microsoftu na temat rekomendowania EF. Na razie EF jest zbyt ciężki i zbyt skomplikowany, by ktoś mógł go wybrać, oprócz tego, że wciąż się rozwija, a EF 4 będzie miał poważne zmiany, gdy dojdzie do tego za kilka miesięcy. Ale nie mogę czekać od miesięcy na stworzenie projektu, jak każdy programista tutaj, chcę coś teraz! Po tym powiedziałem, że chcę używać LINQ 2 SQL, moim problemem jest to, że nie mogę po prostu skopiować wygenerowany dbml i używać wygenerowanych klas. Nie potrzebuję DataContext, ponieważ nie zamierzam używać CRUD ani żadnych operacji na bazie danych z aplikacją mobilną. Po prostu chcę Obiekty. Ktoś kiedykolwiek znalazł się w takiej sytuacji? Nie chodzi o to, by ręcznie pisać wszystkie klasy reprezentujące tabele. Ponieważ potrzebuję ich do dalszej manipulacji LINQ to Objects.

Zasadniczo ORM wspierający CF wykonałby zadanie! Ale nie znam żadnych niezgodności, które spotkałbym.

Odpowiedz

2

L2S doskonale współpracuje z kompaktową strukturą. Jednak nie można używać kreatora przeciągania i upuszczania. Będziesz musiał uruchomić SQLMetal.exe samodzielnie, aby wygenerować zajęcia dla ciebie.

SQLMetal.exe: http://msdn.microsoft.com/en-us/library/bb386987.aspx

Przykład z Northwind kompaktowej: http://blogs.msdn.com/sqlservercompact/archive/2007/08/21/linq-with-sql-server-compact-a-ka-dlinq-over-sql-ce.aspx

Innym przykładem, z dużą ilością zdjęć: http://pietschsoft.com/post/2009/01/Using-LINQ-to-SQL-with-SQL-Server-Compact-Edition.aspx

+0

I nie trzeba przy użyciu bazy danych SQL CE na mojej aplikacji komputerowej, tylko trzeba do generowania klas z tabel, wydaje się, że będzie to ręcznie .... –

+0

można uruchomić SQLMetal dostać obiekty ze składnicy danych, a następnie edytuj plik * .cs, który zostanie wygenerowany. –

+0

To jest opcja. Powinienem chyba zmienić wszystkie EntitySet i EntityRef w Generic Collections. –

0

Można użyć DevExpress trwałych obiektów (XPO) na kompaktowej strukturze. Użyłem go wcześniej, ale uznałem, że jest to trochę powolne dla mojego celu (aplikacja do zbierania danych).

Powodem, dla którego nie można znaleźć dużej części tego kompaktowego systemu, jest to, że prędkość jest zwykle tak ważna dla aplikacji urządzeń, że kod dostępu do danych jest zwykle wykonywany ręcznie.

Nie wiem, czy można tworzyć obiekty z już istniejącej bazy danych za pomocą XPO.

+0

Dziękuję za Twoją propozycję. –

3

byłem w stanie zmodyfikować SubSonic 3.0, z db4o/Mainsoft port System.Linq.Expressions z projektu Mono po dodaniu brakujących Queryable źródeł oraz Matt Warren IQToolkit na Codeplex aby zapewnić równoważny L2S na CF.

Chodzi o to, czego potrzeba, ponieważ drzewa wyrażeń Linq nie są obsługiwane w .Net CF 3.5.

Udało mi się użyć DbEntityProvider/DbEntitySession i AttributeMapping/XMLMapping zaimportowanych do Subsonic z IQToolkit, aby zapewnić lepszą obsługę mapowania obiektów i tabel do klasy.

+0

Myślę, że byłoby to wsparcie dla kopiowania wygenerowanych obiektów z pliku dbml, ale nie posiadam tego rodzaju wiedzy. Co na temat System.Data.Linq? Istnieją typy danych binarnych EntitySet <> EntityRef <> i wszystkie atrybuty, które moim zdaniem. Jeśli mógłbym je poprzeć, myślę, że nie będę musiał ręcznie pisać obiektów biznesowych dla urządzeń. Bardzo dobry post. –

0

Jest to jedna dobra opcja generowania z plików dbml zwykłych klas POCO pracujących z LINQ 2 SQL. Jeszcze nie testowane, ale wydaje się obiecane.

http://www.codeplex.com/ULinqGen