System.ArgumentException:初始化字符串的格式不符合从索引 0 开始的规范。3

Posted

技术标签:

【中文标题】System.ArgumentException:初始化字符串的格式不符合从索引 0 开始的规范。3【英文标题】:System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0. 3 【发布时间】:2018-06-07 06:56:30 【问题描述】:

我正在尝试制作一个 .NET Core Web API,但我找不到解决问题的方法。

完全错误是

[ERR] 迭代上下文类型“MailAlertWebApiWithEF.Data.AlertContext”的查询结果时,数据库中发生异常。 ""System.ArgumentException: 初始化字符串的格式不符合从索引 0 开始的规范。

我从现有数据库中获取配置代码

Scaffold-DbContext "server=.;ConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir DBModels -force -v

我的配置是:

 public class AlertModelConfiguration<T>:BaseEntityModelConfiguration<T,int> where T:Alert


    public AlertModelConfiguration(ref ModelBuilder modelBuilder):base(ref modelBuilder)
    
        modelBuilder.Entity<Alert>(entity =>
        
            //entity.HasKey(e => e.AlertId);

            entity.Property(e => e.CreateDate).HasColumnType("datetime");

            entity.Property(e => e.DeleteDate).HasColumnType("datetime");

            entity.Property(e => e.Detail)
                .IsRequired()
                .HasMaxLength(2046)
                .IsUnicode(false);

            entity.Property(e => e.ErrorDetail)
                .IsRequired()
                .HasMaxLength(255)
                .IsUnicode(false);

            entity.Property(e => e.Title)
                .HasMaxLength(50)
                .IsUnicode(false);

            entity.Property(e => e.UpdateDate).HasColumnType("datetime");
        );
     

我的上下文是:

 public class AlertContext:DbContext
  
    public AlertContext(DbContextOptions<AlertContext> options)
        : base(options)
    

    

    public virtual DbSet<Alert> Users  get; set; 


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    
       
        new AlertModelConfiguration<Alert>(ref modelBuilder);
       

        base.OnModelCreating(modelBuilder);
    

我在 appsettings.json 中的 ConnectionStrings:

ConnectionStrings": 
   "AlertContext": "server=.;database=*****;poling=false;Connect 
 Timeout=60;Integrated Security=SSPI"

当我在调试模式下启动时,API 卡在引擎层中。

我的引擎和 IEngine:

Task<CustomListEntity<Alert>> GetByIdAsync(int id);

 public  Task<CustomListEntity<Alert>> GetByIdAsync(int id)
    
        return  CommonOperationAsync(async () =>
         
             var predicate = PredicateBuilder.True<Alert>();
             predicate = predicate.And(p => p.Id == id);

             

             return new CustomListEntity<Alert>()
             
                 EntityList = await _alertReqository.GetAll(skip: 0, take: 10, predicate: predicate,
                     orderExpression: null, rowCount: out var count, ascending: false).ToListAsync(),

                 Count = count,
             ;
         , new BusinessBaseRequest()
         
             MethodBase = MethodBase.GetCurrentMethod()
         , BusinessUtilMethod.CheckRecordIsExist, GetType().Name);
    

我尝试了自己的配置文件,但结果是一样的。怎么了?

【问题讨论】:

【参考方案1】:

此错误表明您的连接字符串不正确。

“pooling”这个词有错别字,试试下面的连接字符串:

ConnectionStrings": 
         "AlertContext": "server=.;database=*****;pooling=false; 
                 Timeout=60;Integrated Security=SSPI"

如果仍然无法正常工作,请确保服务器和数据库值正常。

【讨论】:

【参考方案2】:

我也遇到了同样的错误,但问题不在于连接字符串,而是由于以下一些混淆:

在 Startup.cs 文件中,我添加了以下错误设置:

services.AddDbContext<EFCFWithExistingDBContext>(x => x.UseSqlServer(MyDatabaseConnection));

下面是正确的代码。我的错误消失了。

services.AddDbContext<EFCFWithExistingDBContext>(x => x.UseSqlServer(Configuration.GetConnectionString("MyDatabaseConnection")));

【讨论】:

以上是关于System.ArgumentException:初始化字符串的格式不符合从索引 0 开始的规范。3的主要内容,如果未能解决你的问题,请参考以下文章

System.ArgumentException: 无法找到字体“?”。

CreateSQLQuery(string) 抛出 System.ArgumentException

HttpClient 抛出 System.ArgumentException:'windows-1251' 不是受支持的编码名称

System.ArgumentException 路径中的非法字符

尝试使用 DataGridViewComboBox 和 ValueMember 时出现 System.ArgumentException

CreateSQLQuery(string)抛出System.ArgumentException