2010-07-28 8 views
5

Ho un'app LINQ to Entities e un progetto di database per gestire lo schema in una soluzione VS 2010 che punta a .NET 4.0. Il modello entità è attualmente decodificato dal database. Una delle tabelle è definita con una colonna di tipo datetime. Il progetto del database è configurato per utilizzare la modalità di compatibilità di SQL Server 2005 e quindi distribuisce tutto OK.LINQ alle entità produce query contenente datetime2 su SQL 2005 Express

ho appena incontrato un problema in cui un'istruzione di aggiornamento tramite Entity Framework sembra utilizzare datetime2 piuttosto che datetime, che causa un'eccezione perché SQL 2005 non supporta questo tipo di dati:

System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.ArgumentException: The version 
of SQL Server in use does not support datatype 'datetime2'. 

Dalla traccia dello stack è sembra che l'errore sembra essere che si verificano all'interno di:

System.Data.Mapping.Update.DynamicUpdateCommand 

ho guardato attraverso tutti il ​​mio codice SQL e il codice entità e ha confermato che non esistono per i riferimenti datetime2 (incluso il file dbschema). Posso solo concludere che il tipo di dati viene generato nella query SQL dinamica generata dall'entità framework.

Come posso confermare o negare questo e come posso evitare che ciò accada? Il framework Entity non sa che ho chiesto al progetto db di scegliere la modalità di compatibilità 2005, e non riesco a vedere un modo per indicargli la versione che sta guardando. Per quello che vale, ho creato questo progetto su una macchina che ha installato 2008 Express, ma passo periodicamente su un'altra macchina che non lo fa (e non può ancora aggiornarlo).

+2

Per chiunque abbia questo problema con LINQ to SQL, è possibile modificare i tipi di dati dei campi tabella in "smalldatetime" in SQL Server. Quindi trascina nuovamente le tabelle sul DBML, ricompila, ridistribuisci e dovresti impostarlo. Non sono riuscito a trovare l'equivalente di ProvidermanifestToken per LINQ to SQL –

risposta

13

È necessario modificare ProviderManifestToken all'interno di EDMX sul valore 2005. Probabilmente il DB è stato generato rispetto a un DB 2008. Apporta questa modifica e l'EF smetterà di usare la sintassi del 2008.

+0

perfetto! Grazie! –

+0

Molto utile, molte grazie. – Fanda

Problemi correlati