正则表达式迁移到SQL Server



我有代码第一实体类,其中一列必须有20个字符的长度,只包含拉丁符号,数字,'_'和'-'符号。

我写了这个正则表达式@"^[A-Z0-9-_]$",但是当运行add-migration并生成数据库时,在SQL Server中不接受这个表达式。

[DataContract(IsReference = true)]
public partial class Vendor : IBaseEntity
{
[Key, DataMember, MaxLength(20), RegularExpression(@"^[A-Z0-9-_]{1,20}$",
ErrorMessage = "")]
public string No { get; set; }
}

可以帮助如何在SQL Server中输入或迁移此限制?或者如果这个方法不起作用,还有其他方法吗?

可以解决

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

modelBuilder.Entity<Company>(entity =>
entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "([Display Name] NOT LIKE '%[A-Z0-9-_]%')"));

base.OnModelCreating(modelBuilder);
}

HasCheckConstraint是正确的方法。不幸的是,您创建的检查约束与您的需求不匹配。

您的要求是该列只包含拉丁符号、数字、'_'和'-'符号

检查约束验证列包含至少一个拉丁符号、数字、'_'或'-'符号

要正确匹配您的需求,您需要使用:

entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "([Display Name] NOT LIKE '%[^A-Z0-9-_]%')"));

此模式查找不是的任何字符——字母、数字、_-符号。然后该模式被否定——任何匹配该模式的值都是无效的。

LIKE (Transact-SQL) -SQL Server | Microsoft Docs

EF的解

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

modelBuilder.Entity<Company>(entity =>
entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "([Display Name] NOT LIKE '%[A-Z0-9-_]%')"));

base.OnModelCreating(modelBuilder);
}

相关内容

  • 没有找到相关文章

最新更新