День 1123. #ЧтоНовенького
Новинки Entity Framework Core 6. Часть 1
1. Атрибут Unicode
Новый атрибут Unicode позволяет сопоставлять строковое свойство со столбцом, отличным от Unicode, без прямого указания типа базы данных. Атрибут Unicode игнорируется, если система баз данных поддерживает только типы Unicode.
public class Book
{
// …
[Unicode(false)]
public string Title { get; set; }
}
2. Атрибут Precision
До EF Core 6.0 вы могли настроить точность с помощью Fluent API. Теперь вы можете сделать это также с помощью аннотаций:
public class Product
{
// …
[Precision(precision: 10, scale: 2)]
public decimal Price { get; set; }
}
3. Атрибут Column
Помогает указать порядок столбцов в создаваемых таблицах. Также это можно сделать с помощью нового Fluent API — HasColumnOrder().
public class EntityBase
{
[Column(Order = 1)]
public int Id { get; set; }
[Column(Order = 99)]
public DateTime CreatedOn { get; set; }
}
public class Person : EntityBase
{
[Column(Order = 2)]
public string FirstName { get; set; }
[Column(Order = 3)]
public string LastName { get; set; }
}
4. Атрибут EntityTypeConfiguration
Помогает EF Core найти и использовать подходящую конфигурацию. До этого нужно было создавать экземпляр конфигурации класса и вызывать его из метода OnModelCreating:
public class ProductConfig :
IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> b)
{
b.Property(p => p.Name).HasMaxLength(250);
b.Property(p => p.Price).HasPrecision(10, 2);
}
}
[EntityTypeConfiguration(typeof(ProductConfig))]
public class Product
{
// …
}
5. Предварительная конфигурация модели
Позволяет вам указать конфигурацию сопоставления один раз для данного типа. Это может быть полезно, например, при работе с объектами-значениями.
public class ExampleContext : DbContext
{
public DbSet<Person> People { get; set; }
protected override void
ConfigureConventions(ModelConfigurationBuilder mcb)
{
mcb.Properties<string>()
.HaveMaxLength(500);
mcb.Properties<decimal>()
.HavePrecision(12, 2);
mcb.Properties<Address>()
.HaveConversion<AddressConverter>();
}
}
Здесь для поля типа Address будет использоваться класс конвертера, сериализующий значение в JSON:
public class AddressConverter :
ValueConverter<Address, string>
{
public AddressConverter()
: base(
v => JsonSerializer.Serialize(v,
(JsonSerializerOptions)null),
v => JsonSerializer.Deserialize<Address>(v,
(JsonSerializerOptions)null))
{
}
}
Источник: blog.okyrylchuk.dev/entity-…s-part-1