2010-07-28 3 views
5

Ich habe eine LINQ to Entities App und ein Datenbankprojekt zur Verwaltung des Schemas in einer VS 2010-Lösung mit .NET 4.0. Das Entitätsmodell wird derzeit aus der Datenbank reverse engineered. Eine der Tabellen ist mit einer Spalte vom Typ datetime definiert. Das Datenbankprojekt ist so konfiguriert, dass es den Kompatibilitätsmodus von SQL Server 2005 verwendet und daher alles OK bereitstellt.LINQ to Entities erzeugt eine Abfrage mit datetime2 in SQL 2005 Express

Ich habe gerade in ein Problem laufen, wo eine Update-Anweisung über die Rahmeneinheit erscheint eher zu verwenden datetime2 als Datetime, die eine Ausnahme verursacht, weil SQL 2005 nicht diesen Datentyp nicht unterstützt:

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'. 

von der Stack-Trace wird angezeigt, dass der Fehler innerhalb werden auftretende scheint:

System.Data.Mapping.Update.DynamicUpdateCommand 

ich habe alle meine SQL-Code und Entity-Code und bestätigt sah durch, dass keine Verweise auf datetime2 existieren (einschließlich der dbschema Datei). Ich kann nur folgern, dass der Datentyp in der dynamischen SQL-Abfrage erzeugt wird, die vom Entity-Framework generiert wird.

Wie kann ich dies bestätigen oder ablehnen, und wie kann ich verhindern, dass es passiert? Das Entity-Framework weiß nicht, dass ich das db-Projekt gebeten habe, den Kompatibilitätsmodus 2005 anzusprechen, und ich kann keine Möglichkeit sehen, darauf hinzuweisen, welche Version es betrachtet. Für das, was es wert ist, habe ich dieses Projekt auf einem Computer erstellt, auf dem 2008 Express installiert war, aber ich wechsle in regelmäßigen Abständen zu einem anderen Computer, der dies nicht tut (und noch nicht upgraden kann).

+2

Für alle, die dieses Problem mit LINQ to SQL haben, können Sie die Datentypen Ihrer Tabellenfelder in SQL Server in "smalldatetime" ändern. Ziehen Sie Ihre Tabellen dann erneut in Ihre DBML, kompilieren Sie sie erneut, und stellen Sie sie wieder ein. Ich konnte das Äquivalent von ProvidermanifestToken für LINQ to SQL nicht finden –

Antwort

13

Sie müssen die ProviderManifestToken in Ihrem EDMX auf den Wert 2005 ändern. Sie haben wahrscheinlich Ihre DB gegen eine 2008 DB generiert. Nehmen Sie diese Änderung vor, und die EF verwendet keine Syntax von 2008 mehr.

+0

perfekt! Vielen Dank! –

+0

Sehr nützlich, vielen Dank. – Fanda