2014-12-17 1 views
5

У меня есть эта модель:Entity Framework и строка, как NCLOB на оракула Db

public class Teacher 
{ 
    public int TeacherID { get; set; } 
    public string Name { get; set: } 
    public string Surname{ get; set; } 
} 

и когда модель Первый запуск, он создает мой стол учителей и DbSet, но для имени и фамилии (которые строка) присваивает NCLOB в колонку. Теперь, с типом NCLOB, я не могу выполнять некоторые операции, такие как equals или distincts на моей таблице ....

Как заставить MF установить тип столбца в varchar?

ответ

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, которое может содержать до 4 Гб данных.

Примечание: Максимальная длина для VARCHAR составляет 4000 байт, поэтому мы не можем установить более 2000 в MaximumLenght (2 байта на символ с Unicode)

+0

У меня есть int с .ToString() в запросе LINQ и он использует TO_NCLOB в запросе, который создан. Есть ли способ предотвратить это? – JonathanPeel

+0

@JonathanPeel Если int доступен вне запроса LINQ, вы можете преобразовать int в локальную строковую переменную за пределами LINQ и использовать строку в запросе LINQ. –

+0

Я нашел способ привязать методы расширения к функциям Oracle, используя '[Function (FunctionType.BuiltInFunction, TO_CHAR))'. Затем я создал 'int.ToChar()', и он отлично работает. – JonathanPeel

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

+0

мне удалось решить это «правильный путь». Я отправлю ответ, но благодарю вас за все усилия! – Andrea

+0

только должен быть 'varchar2'? – Toolkit