Аннотация данных минимальной длины / диапазона не работает в тесте NUnit

#c# #entity-framework-core #data-annotations

#c# #entity-framework-core #данные-аннотации

Вопрос:

Если я использую MinLen и Range в своем классе модели, тест не выдает ожидаемого исключения.

Вместо этого MaxLength работает так, как ожидалось.

У меня такое же поведение, также использующее другую базу данных, такую как sqlite, sqlserver.

 [TestFixture]
public class PostgreSqlRangeFixture
{
    [Test]
    public void TestRange_MustThrow()
    {
        using (var ctx = new LocalDbContext()) {
            ctx.Database.EnsureCreated();

            User user = new User() { FirstName = "12", LastName = "too short", Age = -100 };
            ctx.Users.Add(user);
            ctx.SaveChanges();
        }
    }
}

public class LocalDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);

        const string psw = "marcos";
        string dbName = "test_"   DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.fff");
        var cs = $"Host=192.168.99.100;Username=postgres;Password={psw};Database={dbName}";
        optionsBuilder.UseNpgsql(cs);
    }
}

public class User
{
    public int Id { get; set; }

    [Required]
    [MaxLength(2)]
    public string FirstName { get; set; }

    [Required]
    [MinLength(20)]
    public string LastName { get; set; }

    [Required]
    [Range(0,150)]
    public int Age { get; set; }
}
  

Комментарии:

1. Эти аннотации данных не используются / не рассматриваются EF Core (в настоящее время).

Ответ №1:

Ядро EF использует только часть атрибутов, предоставляемых этими пространствами имен:

Система.ComponentModel.Примечания к данным.Система схем.ComponentModel.Примечания к данным

Похоже, что в вашем случае должны работать только Required и MaxLength. Проверьте это -> Аннотации ядра EF

Остальные атрибуты могут быть использованы при проверке модели в ASP.NET Основные API -> Щелкните

Комментарии:

1. Правильно. Этот список действительно должен быть предоставлен официальной документацией EF Core, а не внешним источником, но поскольку они этого не сделали, все в порядке.

2. Я согласен, это действительно заставляет меня задуматься о том, что подобные вещи не просто помещаются в одно место. У них даже есть страница , объясняющая использование с примерами, я думаю, что размещение таблицы с однострочным объяснением не повредило бы им так сильно, не так ли?