Provo ad usare il codice prima con una colonna di xmltype
Nel mio db:
TIPOS_GRIFOS
ID_TIPOS_GRIFOS: NUMBER (38,0)
DESC_TIPOS_GRIFOS: VARCHAR2 (250 BYTE)
CONFIG: XMLTYPE
Nel mio codice:
[Table("TIPOS_GRIFOS")]
public class TiposGrifos : BaseEntity
{
[Column("ID_TIPOS_GRIFOS"), Key]
public int IdTiposGrifos { get; set;}
[Column("DESC_TIPOS_GRIFOS")]
public string DescTiposGrifos
{ get; set; }
[Column("CONFIG")]
public string Config
{ get; set; }
[NotMapped]
public XElement xmlData
{
get { return XElement.Parse(Config); }
set { Config = value.ToString(); }
}}
Posso eseguire:
var tiposGrifo = repository.GetById(1);
tiposGrifo.xmlData = template;
E questo oggetto va bene, con i dati importati correttamente dal db. Ma quando provo context.SaveChanges (), lancia l'eccezione ORA-932.
Grazie.
PD: ci ho provato
[Column(TypeName="xml")]
public string Config { get; set; }
e quello non ha funzionato.
Ho trovato il problema:
Un "ORA-00932: tipi di dati incoerenti: previsto - ottenuto NCLOB" verrà rilevato quando si tenta di associare una stringa uguale o maggiore di 2.000 caratteri a una colonna o parametro XMLType. [Bug 12630958]
Ho provato a inserire un piccolo xml (meno di 2000 caratteri) e il mio codice funziona perfettamente. Ma devo essere in grado di inserire xml più grandi ... Qualche soluzione?
Aggiornare :
Questo è il problema noto del fornitore di dati Oracle. Devi aspettare che risolvano il problema.
- È possibile incontrare un errore "ORA-00932: tipi di dati incoerenti" se una stringa di 2000 o più caratteri o una matrice di byte con 4.000 byte o più di lunghezza è associata a una clausola WHERE di una query LINQ / ESQL. Lo stesso errore può essere riscontrato se una proprietà di entità che esegue il mapping a una colonna BLOB, CLOB, NCLOB, LONG, LONG RAW, XMLTYPE viene utilizzata in una clausola WHERE di una query LINQ / ESQL.
Puoi leggerlo a riguardo nella sezione Suggerimenti, limitazioni e problemi noti di Entity Framework su questo documento.
Post originale:
Puoi provarlo con Fluent API come mostrato di seguito.
public String Config { get; set; }
public XElement xmlData
{
get { return XElement.Parse(Config); }
set { Config = value.ToString(); }
}
public partial class XmlEntityMap : EntityTypeConfiguration<XmlEntity>
{
public FilterMap()
{
this.Property(c => c.Config).HasColumnType("xml");
this.Ignore(c => c.xmlData);
}
}