Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 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