C# · 12月 23, 2021

c# – 迁移中未应用的最大长度

我正在使用带有preview2工具的efcore.sqlserver 1.0.1 – 我有一个字符串属性,它在sql server中创建为nvchar(max)字段.当我向属性添加数据注释stringlength(100)并添加新迁移时,迁移根本不会改变列.

但是,如果我添加一个required和StringLength注释,则生成的迁移会更改列并显示(.. maxLength:100,nullable:false)

为什么只有在我改变可以为空的值时才这样做?

解决方法 我相信你需要使用MaxLengthAttribute而不是StringLengthAttribute.

https://docs.efproject.net/en/latest/modeling/max-length.html#data-annotations

这可能是因为StringLength属性具有最小长度选项,sql本身不支持该选项,因此MaxLength属性更适合此用例.

需要明确的是,属性本身没有任何影响.它们可以包含逻辑和信息,但必须在正常执行模型中通过另一段代码的反射来使用.除了编译器赋予特殊含义的某些属性之外,例如Conditional属性.

编辑

作者发现,对于从RC2 =>升级工具集的情况,这是一个已知问题. RTM.

https://github.com/aspnet/Announcements/issues/195