HasMaxLength()用于Fluent API中为string属性设数据库列最大长度,如nvarchar(100),仅影响迁移结构与验证,不约束C#运行时长度,优先级高于数据注解。

EF Core 中的 HasMaxLength() 用于在模型配置中为字符串属性指定数据库列的最大长度(即 nvarchar(50) 这类限制),它只影响迁移生成的数据库结构和验证行为,不控制 C# 层的字符串实际长度。
在哪用?——推荐在 Fluent API 中配置
通常在 OnModelCreating() 方法里用,比数据注解(如 [StringLength(100)])更灵活,尤其适合处理复杂规则或第三方类。
- 对实体属性调用
Property().HasMaxLength(n) - 必须配合
string类型使用(对 int、DateTime 等无效) - 若同时用了数据注解,Fluent API 优先级更高
怎么写?——常见写法示例
比如有个 User 实体:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Property(u => u.Name) // 字符串属性
.HasMaxLength(100); // 生成 nvarchar(100)
<pre class="brush:php;toolbar:false;">modelBuilder.Entity<User>()
.Property(u => u.Email)
.HasMaxLength(255); // 常用于邮箱字段登录后复制
}
执行 dotnet ef migrations add Init 后,生成的迁移代码里会出现类似:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~