如果我已经设置了默认值,如何指定最大长度字符串?
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)
).
通常我可以指定 .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)
).