Beim Einsatz von Entity Framework mit SQL Server datetime-Spalten kann folgender Fehler auftreten:

„System.Data.SqlClient.SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value“

In .NET kann der DateTime-Typ Werte zwischen 01.01.0001 00:00:00 und 31.12.9999. 23:59:59 liegen, in SQL Server dagegen nur von 01.01.1753 00:00:00 bis 31.12.9999 23:59:59. Werden daher DateTime-Werte außerhalb des Wertebereichs des SQL Server-Typs übergeben, versucht Entity Framework automatisch den neueren SQL-Typ datetime2 zu verwenden. Dies führt zu dem obigen Fehler, weil die Tabellenspalte ja weiterhin als datetime definiert ist.

Als Lösungsansatz kann man versuchen im Code ungültige .NET-DateTime-Werte abzufangen. Als Vergleichswerte bietet .NET den System.Data.SqlTypes.SqlDateTime.MinValue mit dem verglichen werden kann ob die verwendeten Werte in den SQL datetime-Wertebereich passen. Wenn Änderungen am Datenbankschema erlaubt sind, kann aber alternativ auch der Datentyp der betroffenen Tabellenspalte auf datetime2 geändert werden. Damit erhält man zusätzlich eine höhere Genauigkeit ohne dabei mehr Speicherplatz als datetime zu benötigen (jeweils 8 Bytes). Außerdem kann bei datetime2 auf Wunsch eine geringere Genauigkeit angeben und damit ein geringerer Speicherbedarf erzielen werden (6 bis 7 Bytes je nach gewünschter Genauigkeit).

Weitere Infos zu datetime2 gibt es unter https://msdn.microsoft.com/en-us/library/bb677335.aspx