实体框架和字符串作为oracle Db中的CLOB

时间:2014-12-17 11:57:47

标签: oracle entity-framework code-first asp.net-mvc-5.2

我有这个型号:

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?

2 个答案:

答案 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");
}

请参阅Documentation