Сначала в коде структуры сущностей установите столбец с типом datetime2 на сервере SQL
У меня есть ценность
DateTime dt = DateTime.Parse("2015-10-12 14:24:40.582");
с этим я делаю:
SomeEntity someEntity = new SomeEntity()
{
ID = 1,
ChangedOn = dt
};
context.SomeEntities.Add(someEntity);
Что я обнаружил: в таблице базы данных хранится значение "2015-10-12 14: 24: 40.5830000"
Я выяснил это вручную с
SELECT CONVERT(datetime2, ChangedOn) FROM SomeEnititiesTable WHERE ID=1;
Я загружаю SomeEntity из базы данных и делаю
bool ok = someEntity.ChangedOn.Equals(dt);
Проблема в том, что ok == false
когда я ожидаю ok == true
,:|
Как сделать код сначала в рамках сущности генерировать столбец типа datetime2 вместо datetime в миграциях?
2 ответа
Как сделать код первым в рамках сущности генерировать столбец типа
datetime2
вместоdatetime
в миграциях?
Чтобы указать тип столбца для использования, вы можете добавить следующий атрибут в свойство ChangedOn
вашей модели:
[Column(TypeName = "datetime2")]
Или, если вы используете Fluent API, вы можете добавить это в свой OnModelCreating
вашей DBContext
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ...
modelBuilder.Entity<someEntity>()
.Property(p => p.ChangedOn)
.HasColumnType("datetime2");
// ...
}
РЕШЕНИЕ
1) Добавить поле ChangedOn2 с типом long.
2) Сохранить значение dt.Ticks в ChangedOn2.
3) Сравните с
someEntity.ChangedOn2.Equals(dt.Ticks);