2009-12-14 8 views
5

Sono in procinto di progettare l'accesso ai dati per una nuova soluzione da me creata. Questa soluzione però contiene Compact Device Device Application e librerie oltre a Desktop. Tutto .NET 3.5. Desktop gestirà fondamentalmente tutto l'accesso ai dati. Ho bisogno che anche gli oggetti dati siano nella CF, Desktop comunicherà con SQL e poi con Mobile e fornirò i dati appropriati ...LINQ a SQL in Compact Framework

Amo LINQ e più amo LINQ 2 SQL. C'è un sacco di hype là fuori e non compro politiche interne di Microsoft sulla raccomandazione di EF. Per ora EF è troppo pesante e troppo complesso per essere scelto da qualcuno, a parte il fatto che è ancora in evoluzione e EF 4 avrà grandi cambiamenti quando arriverà tra qualche mese. Ma non posso aspettare per mesi per creare un progetto come ogni sviluppatore qui, voglio qualcosa ora! Detto questo, voglio usare LINQ 2 SQL, il mio problema è che non posso semplicemente copiare il dbml generato e usare le classi generate. Non ho bisogno di DataContext perché non intendo usare CRUD o qualsiasi operazione su un database con l'app mobile. Voglio solo gli oggetti. Qualcuno è mai entrato in una situazione come questa? L'intero punto non è scrivere tutte le classi che rappresentano le tabelle a mano. Perché ho bisogno di loro per ulteriori manipolazioni LINQ to Objects.

Fondamentalmente un ORM che supporta CF farebbe il lavoro! Ma non conosco incompatibilità che vorrei incontrare.

risposta

2

L2S funziona alla grande con la struttura compatta. Non è possibile utilizzare il designer drag-and-drop, però. Dovrai eseguire tu stesso SQLMetal.exe per generare le classi per te.

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

Esempio con Northwind compatta: http://blogs.msdn.com/sqlservercompact/archive/2007/08/21/linq-with-sql-server-compact-a-ka-dlinq-over-sql-ce.aspx

Un altro esempio, con un sacco di foto: http://pietschsoft.com/post/2009/01/Using-LINQ-to-SQL-with-SQL-Server-Compact-Edition.aspx

+0

Non ho bisogno di utilizzare un database SQL CE sul mio desktop App, ho solo bisogno di generare le classi da tabelle, sembra che io farò questo a mano .... –

+0

È possibile eseguire SQLMetal per ottenere gli oggetti dall'archivio dati, quindi modificare il file * .cs che viene generato. –

+0

Questa è un'opzione. Dovresti cambiare tutti gli EntitySet e EntityRef in Collezioni generiche, immagino. –

0

Si potrebbe utilizzare DevExpress oggetti persistenti (XPO) su un quadro compatto. L'ho usato prima, ma ho trovato un po 'lento per il mio scopo (applicazione di raccolta dati).

La ragione per cui non è possibile trovare molto di questo nel framework compatto è che la velocità di solito è così importante per le app del dispositivo, che il codice di accesso ai dati viene solitamente eseguito manualmente.

Non so se è possibile creare oggetti da un database già esistente con XPO.

+0

Grazie per la tua proposta. –

3

Sono stato in grado di modificare SubSonic 3.0, il db4o porto/Mainsoft del System.Linq.Expressions dal progetto Mono dopo aver aggiunto i mancanti Queryable fonti, e Matt Warren IQToolkit su CodePlex per fornire un equivalente L2S sul CF.

Questo è ciò che serve, tuttavia, poiché gli alberi di espressione Linq non sono supportati su. CF 3.5.

Sono stato in grado di utilizzare DbEntityProvider/DbEntitySession e AttributeMapping/XMLMapping importati in Subsonic da IQToolkit per fornire un'entità migliore e supporto di mapping table-to-class.

+0

Penso che questo possa supportare la copia degli oggetti generati dal file dbml ma non ho questo tipo di conoscenza. Che dire di System.Data.Linq? Vi sono i tipi di dati binari EntitySet <> EntityRef <> e tutti gli attributi che penso. Se potessi supportare questi penso che non dovrò scrivere a mano i Business Objects per i dispositivi. Ottimo post però. –

0

Questa è una buona opzione che genera dal file dbml le normali classi POCO che funzionano con LINQ 2 SQL. Non ancora testato ma sembra promesso.

http://www.codeplex.com/ULinqGen