2014-12-17 11 views
5

ho questo modello:Entity Framework e stringa come NCLOB su Oracle Db

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

e quando Modello Prima esecuzione, crea il mio tavolo insegnanti e DbSet, ma per Nome e Cognome (che sono stringhe) assegna Tipo NCLOB alla colonna. Ora, con il tipo NCLOB non riesco a fare alcune operazioni come uguali o distinti sul mio tavolo ....

Come posso forzare MF per impostare columntype su varchar?

risposta

6

Sono riuscito a risolvere l'impostazione della lunghezza massima di stringa nel modello

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; } 
} 

il problema senza la StringLength Orcale crea un campo NCLOB che può contenere fino a 4 GB di dati.

Nota: Lunghezza massima per varchar è di 4000 byte, quindi non possiamo impostare più di 2000 come MaximumLenght (2 byte per carattere con Unicode)

+0

Ho un int con un .ToString() in una query LINQ e sta utilizzando TO_NCLOB nella query che viene creata. C'è un modo per impedirlo? – JonathanPeel

+0

@JonathanPeel Se l'int è disponibile al di fuori della query LINQ, è possibile convertire l'int in una variabile di stringa locale all'esterno di LINQ e utilizzare la stringa nella query LINQ. –

+0

Ho trovato un modo per mappare i metodi di estensioni alle funzioni Oracle, usando '[Function (FunctionType.BuiltInFunction," TO_CHAR ")]'. Ho quindi creato un 'int.ToChar()', e funziona meravigliosamente. – JonathanPeel

4

tenta di configurare in modo esplicito:

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

Vedi Documentation

+0

sono riuscito a risolvere il 'modo giusto'. Pubblicherò la risposta ma ringrazio comunque per lo sforzo! – Andrea

+0

solo dovrebbe essere 'varchar2'? – Toolkit

Problemi correlati