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

How to specify max length string if I have a default already set?

通常我可以指定 .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) 的默认长度?

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

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

.HasMaxLength(null)不是说使用最大长度,是说使用默认长度,默认默认长度就是最大长度(调用.IsMaxLength()的结果是nvarchar(MAX)).