2010-08-27 14 views
7

Sto riscontrando alcuni problemi nel caricare un tavolo nel designer. Ottengo il seguente errore.LINQ to SQL Designer e il tipo di dati Geography

One or more selected items contain a data type that is not supported by the designer

Sarei corretto nel presupporre che sia il tipo di geografia utilizzato nella tabella che causa questo errore?

Qualsiasi suggerimento molto apprezzato.

risposta

1

Controlla qui sotto l'articolo/risposta per dettaglio:

SqlGeography and Linq to Sql

Is it possible to use SqlGeography with Linq to Sql?

tipi spaziali non sono supportati da LINQ to SQL. Il supporto non è "non eccezionale" - è inesistente.

È possibile leggerli come BLOB, ma non è possibile farlo semplicemente modificando il tipo di colonna in Linq su SQL. È necessario modificare le query a livello di database per restituire la colonna come varbinary, utilizzando l'istruzione CAST. Puoi farlo a livello di tabella aggiungendo una colonna varbinary calcolata, che Linq mapperà felicemente a un byte [].

+0

Grazie, questo progetto è appena iniziato. Sarei meglio passare a un diverso framework di mappatura delle tabelle (orm) che supporta il tipo di geografia? Ci sono? – Chin

+0

@Chin - controlla l'articolo in cui ci sono dei problemi, spero che funzionerà per te - che non è necessario spostarsi su un altro orm –

2

Per correggere questo errore:

  1. Creare una visualizzazione basata sulla tabella desiderata e che non includono il tipo di dati non supportato. 2. Trascinare la vista da Esplora server/Esplora database sul designer.

o si veda questo articolo The Missing Linq to SQL Spatial, Questo articolo fornisce suggerimenti e hack su come utilizzare i tipi di dati spaziali di SQL Server -Geography e geometria; in LINQ to SQL

0

Ho un progetto (una piccola, concesso) che è cresciuto con nuove esigenze per i tipi spaziali. Ho deciso di vedere quanto sarebbe facile effettuare l'aggiornamento al framework di entità da LINQ a SQL.

Mi ci sono voluti non più di 30 minuti. Assicurati di disporre di un backup del controllo del codice sorgente prima di iniziare.

  1. Install-Package EntityFramework -Version {pick one}
  2. Eliminare il vecchio .dbml file (s)
  3. generare un nuovo modello di impresa e aggiornare i riferimenti ai nuovi oggetti entità (questo è più facile se hai già un repository di base o qualcosa di avvolgimento LINQ a SQL). Ho seguito questa rotta (database first/designer) perché si trattava di un percorso di aggiornamento più semplice da LINQ a SQL. Puoi provare prima il codice se preferisci, ma ... YMMV.
  4. Aggiorna le stringhe di connessione. Entity Framework ha il proprio involucro strano attorno alle connessioni SQL tradizionali. Il mio è così, il tuo potrebbe sembrare diverso: metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS; Initial Catalog=MyDataBase; Integrated Security=True'
  5. Correggere gli errori di compilazione. La maggior parte di questi saranno differenze in Insert/DeleteOnSubmit e EF Add/Remove o Add/RemoveRange. Gli ambiti di transazione potrebbero funzionare in modo diverso (considerare l'utilizzo di context.Database.BeginTransaction invece degli ambiti di transazione).
  6. Ricostruirlo una volta risolti gli errori di compilazione.

Questo è tutto.Era molto più facile di quanto mi aspettassi e ora posso usare i tipi spaziali senza trucchi.