Я столкнулся с устаревшим кодом, который нам нужно реорганизовать, чтобы он работал под EFCore 8.0.2.
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(x => x.GetProperties())
.Where(x => x.ClrType == typeof(DateTime) || x.ClrType == typeof(DateTime?)))
{
property.SetColumnType(property.GetAnnotations()
.Select(x => x.Value is not null ? (string)x.Value : string.Empty)
.FirstOrDefault(x => x == DateAttribute.Date) ?? "datetime2(3)");
}
Поскольку у меня больше нет SetColumnType в ImutableProperty, я не знаю, как это переделать. Было бы достаточно, если бы я установил точность 3, например:
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(x => x.GetProperties())
.Where(x => x.ClrType == typeof(DateTime) || x.ClrType == typeof(DateTime?)))
{
property.SetPrecision(3);
}
для всех свойств DateTime или есть другой способ сделать это?





Вы можете ConfigureConventions для всех DateTime объектов недвижимости. Это будет значение по умолчанию для ваших свойств. Позже его можно будет переопределить в OnModelCreating.
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
base.ConfigureConventions(configurationBuilder);
configurationBuilder.Properties<DateTime>().HavePrecision(3);
configurationBuilder.Properties<DateTime?>().HavePrecision(3);
}