#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. Я согласен, это действительно заставляет меня задуматься о том, что подобные вещи не просто помещаются в одно место. У них даже есть страница , объясняющая использование с примерами, я думаю, что размещение таблицы с однострочным объяснением не повредило бы им так сильно, не так ли?