Entity Framework and SqlDateTime Overflow Optimization

System.DateTimecan take a wider range of values ​​than SQL Server DateTime. Consequently, there is a class System.Data.SqlTypes.SqlDateTimethat mimics a later one.

Therefore, I was expecting the Entity Framework to choose SqlDateTime, but it is not.

So my questions are ...

What are the best methods to ensure that your DateTime values ​​do not cause problems when trying to store them in your database?

Is there a way to force EF to use SqlDateTime?

+5
source share
3 answers

There are a few things you can do:

  • SQL Server 2008 , DATE DATETIME2 , , .NET DateTime

  • , / , . EF EntityObject - ,

+4

, , :

, dev env: EF 5, CodeFirst, SqlCE 4.0:

public abstract class Entity : IEntity, IEquatable<Entity>
{
public virtual int Id { get; protected set; }
public virtual DateTime LastModified { get; set; }

[DataType(DataType.Date)]
public virtual DateTime CreatedOn { get; set; }

[DataType(DataType.DateTime)]
public virtual DateTime CreatedOn2 { get; set; }

[DataType(DataType.Time)]
public virtual DateTime CreatedOn3 { get; set; }

public virtual DateTime CreatedOn4 { get; set; }
}

:

public EntityMapping()
{
HasKey(e => e.Id);
Property(e => e.Id);
Property(e => e.LastModified).IsRequired().IsConcurrencyToken();
Property(e => e.CreatedOn).IsRequired();
Property(e => e.CreatedOn2).IsRequired();
Property(e => e.CreatedOn3).IsRequired();
Property(e => e.CreatedOn4).IsRequired();
}

this, , .

SQL CE 4.0:

Property(e => e.CreatedOn).IsRequired().HasColumnType("datetime2");
Property(e => e.CreatedOn2).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn3).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn4).IsRequired().HasColumnType("datetime2");

. SQL Server Standard 2012, , ( - ). SQL Server this.

Sql, , SQL CE . env. . DateTime , .

, SqlDateTime DateTime .

, - , - LocalDb SQL, stackoverflow fluentApi, , .

EF, .

- , dev-production , .

+1

All Articles