Entity Framework Oracle 00932 ошибка "ожидается - получил NCLOB" - PullRequest
0 голосов
/ 08 февраля 2019

Это буквально сводит меня с ума.Я создал таблицу, как вы можете видеть из изображения ниже:

oracle table structure

И это свободная конфигурация для сущности User:

//this is the User entity model class
public class User
{
    public long Id { get; set; }
    public string EmailAddress { get; set; }
    public string HashedPassword { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int IsAdmin { get; set; }
}

public class UserEntityModelBuilder : IEntityModelBuilder
{
    public void Build(DbModelBuilder modelBuilder)
    {
        var config = modelBuilder.Entity<User>();

        config.Property(e => e.Id).HasColumnName("ID");
        config.Property(e => e.EmailAddress).HasColumnName("EMAIL");
        config.Property(e => e.HashedPassword).HasColumnName("PASSWORD");
        config.Property(e => e.FirstName).HasColumnName("NOME");
        config.Property(e => e.LastName).HasColumnName("COGNOME");
        config.Property(e => e.IsAdmin).HasColumnName("ADMIN");

        config.ToTable("UTENTIEROGAZIONE").HasKey(e => e.Id);
    }
}

Теперь я выполняю очень простую инструкцию LINQ только для проверки входа в систему и выдает это странное сообщение об исключении:

enter image description here

факт, что я использую только поля VARCHAR2, я не могу понять, что, черт возьми, происходит ... какие-либо подсказки?

EDIT (добавлена ​​инициализация DbContext):

public BarcodePrinterDbContext(IConnectionStringProvider connectionStringProvider, 
    IEnumerable<IEntityModelBuilder> entityModelBuilders) 
    : base(connectionStringProvider.GetConnectionString())
{
    _entityModelBuilders = entityModelBuilders ?? 
        throw new ArgumentNullException(nameof(entityModelBuilders));

    Database.SetInitializer(
        new NullDatabaseInitializer<BarcodePrinterDbContext>());
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //setting the schema for Oracle DB
    SchemaSetup.SetupSchema(modelBuilder);

    //registering all entities fluent configurations on the model builder
    foreach (var entityModelBuilder in _entityModelBuilders)
        entityModelBuilder.Build(modelBuilder);

    /*
    * I googled out something on wrong mappings on string types, 
    * so I tried to set all string fields to a maximum of 2000 
    * characters, unfortunately with no success.
    */

    modelBuilder
        .Properties()
        .Where(p => p.PropertyType == typeof(string) &&
                    p.GetCustomAttributes(typeof(MaxLengthAttribute), false).Length == 0)
        .Configure(p => p.HasMaxLength(2000));
}

1 Ответ

0 голосов
/ 15 февраля 2019

К вашему сведению, все дело в настройке целевой схемы: я вводил старый объект SchemaSetup с другой схемой вместо «IMPEGNATIVE».К сожалению, я смог выполнить запрос поверх него, потому что у меня были все виды привилегий, заданных для пользователя db, таким образом, ошибка (таблица в этой другой схеме на самом деле имела поля NCLOB).

Итак, всегда проверяйте свою целевую схему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...