Je développe en utilisant .net core. La base de données utilise Oracle. La valeur maximale de varchar2 est de 4 000 octets, et quel type de données est utilisé pour stocker les données au-dessus?

J'ai créé une colonne en utilisant clob et l'ai mappée sur .net.

Modèle

public string CONTENTS { get; set; }

Code

try
{
    var content= _mapper.Map<T_CONTENT>(post);

    _dbcontext.T_CONTENT.Add(content);
    _dbcontext.SaveChanges();
    transaction.Commit();

    return content.ID;
}
catch (Exception e)
{
    transaction.Rollback();
    return null;
}

public class contentDbContext : DbContext
{
    public contentDbContext(DbContextOptions options)    : base(options) { }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }

    public DbSet<T_CONTENT> T_CONTENT{ get; set; }
}

Lorsque j'enregistre les données, j'obtiens l'erreur ci-dessous. message d'erreur: ORA-01460: conversion non mise en œuvre ou déraisonnable demandée

2
김세림 2 sept. 2020 à 08:52

3 réponses

Meilleure réponse

Dans le mappage, vous pouvez essayer d'utiliser .HasColumnType ("CLOB") avec votre modelBinder

Exemple:

public class ContentDbContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<<EntityName>>()
            .Property(a => a.<CoulmnName>).HasColumnType("CLOB");
    }
}
1
Chandra Prakash Ajmera 2 sept. 2020 à 06:15

Cela vous aide-t-il? S'il te plaît, vérifie cela.

https://docs.oracle.com/database/121/REFRN/GUID-D424D23B-0933-425F-BC69-9C0E6724693C.htm#REFRN10321

0
Asherguru 2 sept. 2020 à 07:15

Selon ODP.NET EF Core Mappage des types de données des migrations, le string type de mappage par défaut sans annotations de données / configuration fluide est NVARCHAR2(2000).

En fonction des valeurs de IsUnicode, IsFixedLength et HasMaxLength, il peut s'agir de CHAR[n], NCHAR[n], VARCHAR2[n], NVARCHAR2[n], CLOB et NCLOB.

Donc, si vous avez besoin de longues chaînes avec MaxLength> = 2000 caractères, vous devez soit spécifier la longueur maximale> = 2000 avec des annotations de données ([MaxLength] ou [StringLength], vous ne savez pas laquelle, vous devez déterminer ) ou HasMaxLength API fluente - l'une ou l'autre devrait vous donner le type de données de stockage CLOB ou NCLOB. Ou, spécifiez directement le type de données de stockage via l'argument TypeName de l'attribut [Column] ou l'API fluent HasColumnType.

À partir des deux méthodes, il est préférable de le faire en spécifiant la longueur maximale, car elle est plus abstraite et indépendante de la base de données, et représente mieux le comportement souhaité sans traiter des types spécifiques de base de données.

1
Ivan Stoev 2 sept. 2020 à 06:28