Сначала в коде структуры сущностей установите столбец с типом 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);
Другие вопросы по тегам