我有这个型号:
public class Teacher
{
public int TeacherID { get; set; }
public string Name { get; set: }
public string Surname{ get; set; }
}
当Model First运行时,它会创建我的Teachers表和DbSet,但是对于Name和Surname(它是字符串),它会将NCLOB类型分配给列。 现在,对于NCLOB类型,我不能在我的桌子上做一些像equals或distinct一样的操作....
如何强制MF将columntype设置为varchar?
答案 0 :(得分:6)
我设法解决了将最大字符串长度设置到模型中的问题
public class Teacher
{
public int TeacherID { get; set; }
[StringLength(255, MinimumLength = 3, ErrorMessage = "My Error Message")]
public string Name { get; set: }
[StringLength(255, MinimumLength = 3, ErrorMessage = "My Error Message")]
public string Surname{ get; set; }
}
没有StringLength Orcale创建一个NCLOB字段,最多可包含4Gb数据。
注意:varchar的最大长度为4000字节,因此我们不能将超过2000设置为MaximumLenght(每个字符使用Unicode 2个字节)
答案 1 :(得分:4)
尝试明确配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Teacher>().Property(x => x.Name).HasColumnType("varchar");
modelBuilder.Entity<Teacher>().Property(x => x.Surname).HasColumnType("varchar");
}