如果我已经设置了默认值,如何指定最大长度字符串?

Posted

技术标签:

【中文标题】如果我已经设置了默认值,如何指定最大长度字符串?【英文标题】:How to specify max length string if I have a default already set? 【发布时间】:2022-01-04 21:48:10 【问题描述】:

通常我可以指定.HasMaxLength(null),这将产生一个最大长度的字符串列(nvarchar(MAX))。

我认为事实上这实际上是默认值,如果你不指定长度,那么你会得到nvarchar(MAX)

但是,可以使用如下代码设置默认值:

DbModelBuilder.Properties<string>().Configure(config => config.HasMaxLength(50));

这将导致所有字符串列默认具有nvarchar(50)(最大长度为 50)。

但是,这似乎阻止了.HasMaxLength(null) 工作,我无法再选择最大长度。我也尝试说.HasMaxLength(null).HasColumnType("nvarchar(MAX)"),这适用于在数据库级别生成正确的列,但后来我发现当我的长度超过 50 个字符时,EF 仍然抛出异常。

有没有办法解决这个问题,还是我必须手动将大多数字符串列设置回.HasMaxLength(50),然后忘记与nvarchar(MAX) 不同的默认长度?

【问题讨论】:

【参考方案1】:

我发现这里的解决方法是使用.IsMaxLength()方法。

.IsMaxLength() 是我猜的默认值,并说“使用最大长度”(nvarchar(MAX))。

.HasMaxLength(null)没有说使用最大长度,它说使用默认长度,默认默认长度是最大长度(调用.IsMaxLength()的结果是nvarchar(MAX))。

【讨论】:

以上是关于如果我已经设置了默认值,如何指定最大长度字符串?的主要内容,如果未能解决你的问题,请参考以下文章

SQL中nvarchar类型的默认长度是多少?

设置 Textarea 的最大长度

VS Code 中的 TSLint 配置

增加QueryString最大长度[重复]

angular 下拉框null默认值

java中怎么把字符串转化为字符串数组?