7

我有这个模型:

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 类型,我无法在我的表上执行一些操作,例如等于或不同......

如何强制 MF 将 columntype 设置为 varchar?

4

2 回答 2

7

我已经设法解决了在模型中设置最大字符串长度的问题

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 会创建一个最多可包含 4Gb 数据的 NCLOB 字段。

注意:varchar 的最大长度为 4000 字节,因此我们不能将 MaximumLenght 设置为超过 2000(使用 Unicode 时每个字符 2 字节)

于 2014-12-18T08:34:42.880 回答
5

尝试显式配置它:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Teacher>().Property(x => x.Name).HasColumnType("varchar");
    modelBuilder.Entity<Teacher>().Property(x => x.Surname).HasColumnType("varchar");
}

查看文档

于 2014-12-17T13:47:37.073 回答