如何在MySQL中通过Code First创建NVARCHAR(255)列?
解决EF Core中MySQL生成NVARCHAR(255)列的问题
我明白你遇到的困扰——EF Core在MySQL环境下默认会把string类型属性映射成LONGTEXT,而你想生成NVARCHAR(255),之前用DataAnnotation的方式没达到预期对吧?我来给你说下正确的配置方法:
方法一:使用DataAnnotation注解
之前的[DataType("NVARCHAR")]其实不对,因为DataType注解主要用于UI验证或数据格式标记,并不会直接影响数据库列类型的映射。你可以用下面两种正确的写法:
直接指定列类型
[Column(TypeName = "NVARCHAR(255)")] public string Name { get; set; }
结合Unicode和长度限制
因为MySQL的NVARCHAR本质是支持Unicode的字符类型,所以也可以通过Unicode注解配合长度限制来实现:
[MaxLength(255)] [Unicode(true)] public string Name { get; set; }
方法二:使用Fluent API配置
如果更倾向于Fluent API的方式,你可以这样写(补全你之前没写完的代码):
直接指定列类型
modelBuilder.Entity<MyEntity>() .Property(p => p.Name) .HasColumnType("NVARCHAR(255)"); // 可选:如果需要设置非必填,可以加上.IsRequired(false)
结合Unicode和长度配置
同样,也可以通过开启Unicode支持+设置最大长度来生成NVARCHAR(255):
modelBuilder.Entity<MyEntity>() .Property(p => p.Name) .IsUnicode(true) .HasMaxLength(255);
这样配置后,EF Core就能在MySQL中生成你想要的NVARCHAR(255)列啦~
内容的提问来源于stack exchange,提问作者41686d6564
相关产品推荐
相关产品推荐

