微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MinLength / Range数据注释在NUnit测试中不起作用

如何解决MinLength / Range数据注释在NUnit测试中不起作用

如果我在模型类中使用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; }
}

解决方法

EF Core仅使用这些命名空间提供的部分属性:

System.ComponentModel.DataAnnotations.Schema System.ComponentModel.DataAnnotations

在您的情况下,似乎只有 Required MaxLength 应该起作用。选中此-> EF Core Annotations

其余属性可以在ASP.NET Core API的-> Click

中用于模型验证

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。