Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架Oracle 00932错误“;预期-获得NCLOB“;_C#_.net_Oracle_Entity Framework_Linq - Fatal编程技术网

C# 实体框架Oracle 00932错误“;预期-获得NCLOB“;

C# 实体框架Oracle 00932错误“;预期-获得NCLOB“;,c#,.net,oracle,entity-framework,linq,C#,.net,Oracle,Entity Framework,Linq,这简直快把我逼疯了。我创建了一个表,如下图所示: 这是用户实体的流畅配置: //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

这简直快把我逼疯了。我创建了一个表,如下图所示:

这是用户实体的流畅配置:

//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);
    }
}
//这是用户实体模型类
公共类用户
{
公共长Id{get;set;}
公共字符串电子邮件地址{get;set;}
公共字符串哈希密码{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
public int IsAdmin{get;set;}
}
公共类UserEntityModelBuilder:IEntityModelBuilder
{
公共void生成(DbModelBuilder modelBuilder)
{
var config=modelBuilder.Entity();
属性(e=>e.Id).HasColumnName(“Id”);
属性(e=>e.EmailAddress).HasColumnName(“电子邮件”);
属性(e=>e.HashedPassword).HasColumnName(“密码”);
属性(e=>e.FirstName).HasColumnName(“NOME”);
属性(e=>e.LastName).HasColumnName(“COGNOME”);
属性(e=>e.IsAdmin).HasColumnName(“ADMIN”);
config.ToTable(“UTENTIEROGAZIONE”).HasKey(e=>e.Id);
}
}
现在我运行一个非常简单的LINQ语句来测试登录,它抛出了一条奇怪的异常消息:

事实上,我只使用了VARCHAR2字段,我不明白到底发生了什么…有什么线索吗

编辑(添加了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));
}
public条形码打印erdbContext(IConnectionStringProvider connectionStringProvider,
IEnumerable entityModelBuilders)
:base(ConnectionString Provider.GetConnectionString())
{
_entityModelBuilders=entityModelBuilders??
抛出新ArgumentNullException(nameof(entityModelBuilders));
Database.SetInitializer(
新的NullDatabaseInitializer());
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//为Oracle数据库设置架构
SchemaSetup.SetupSchema(modelBuilder);
//在模型生成器上注册所有实体和配置
foreach(在_entityModelBuilders中的变量entityModelBuilder)
entityModelBuilder.Build(modelBuilder);
/*
*我用谷歌搜索出了字符串类型的错误映射,
*因此,我尝试将所有字符串字段的最大值设置为2000
*角色,不幸没有成功。
*/
建模者
.Properties()
.Where(p=>p.PropertyType==typeof(字符串)&&
p、 GetCustomAttributes(typeof(MaxLengthaAttribute),false)。长度==0)
.Configure(p=>p.HasMaxLength(2000));
}

仅供参考,这一切都与目标模式设置有关:我将一个旧的SchemaSetup对象注入一个不同的模式,而不是“impignative”。不幸的是,我能够在它上面运行查询,因为我在db用户上设置了各种特权,因此出现了错误(这个其他模式中的表实际上NCLOB字段)


因此,请始终检查您的目标模式

EmailAddress不是一个类。您不想要emailAddress.EMAIL吗?@jdweng-nope:emailAddress是字符串属性,emailAddress是字符串参数为什么要使用string.Equals?如果您将其切换为==?@DevilSuichiro是的,已经尝试了同样的例外情况能否告诉我们您正在初始化/设置DbContext的位置??看看这些帖子:。