【发布时间】:2021-09-18 06:39:20
【问题描述】:
我有代码优先实体类,其中一列的长度必须为 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);
}
【问题讨论】:
-
您真的希望数据库进行正则表达式检查吗?然后如果它失败了怎么办..抛出异常?将正则表达式放在
set中并在c# 端执行如何? (你不想在你的视图模型中这样做吗?当数据到达数据库实体时,它应该已经“正确”了?) -
SQL Server 不支持这种正则表达式.....
-
感谢您的回答,但我希望在 SQL Server 数据库中接受、保存和使用此限制,或者如果此方法不起作用,还有其他方法吗?
标签: c# sql-server entity-framework