C#+ MySql + Code First:初始化字符串的格式不符合从索引0开始的规范

时间:2015-06-25 04:40:08

标签: c# mysql entity-framework

我创建了一个与MySQL DB连接的库项目。

  1. 包括MySql.DataMySql.Data.Entity.EF6由Nuget =>行。
  2. 由Nuget =>安装EntityFramework
  3. 我创建了MyContext.cs
  4. namespace Project_Core.DAL.Context
    {
        [DbConfigurationType(typeof(MySqlEFConfiguration))]
        public class MyContext: DbContext
        {
            public MyContext()
                : base("myDbContext")
            {
    
            }
    
            public DbSet<Staff> Staffs { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
    }
    
    1. 我编辑了App.config
    2. <connectionStrings> <add name="myDbContext" providerName="MySql.Data.MySqlClient" connectionString="Data Source=localhost; port=3306; Initial Catalog=dbtest; uid=root; pwd=1234;" /> </connectionStrings>

      1. 我打开了#34;包管理器控制台&#34;并写道:
      2. Enable-Migrations -Force

        但我收到了这些错误:

        Checking if the context targets an existing database...
        System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
           at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
           at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
           at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
           at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
           at MySql.Data.MySqlClient.MySqlConnectionStringBuilder..ctor(String connStr)
           at MySql.Data.MySqlClient.MySqlConnection.set_ConnectionString(String value)
           at MySql.Data.MySqlClient.MySqlConnection..ctor(String connectionString)
           at MySql.Data.Entity.MySqlConnectionFactory.CreateConnection(String connectionString)
           at System.Data.Entity.Internal.LazyInternalConnection.Initialize()
           at System.Data.Entity.Internal.LazyInternalConnection.get_Connection()
           at System.Data.Entity.Internal.LazyInternalContext.get_Connection()
           at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo)
           at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext)
           at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
           at System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration)
           at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()
           at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
           at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
           at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
           at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(String language, String rootNamespace)
           at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0()
           at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
        Format of the initialization string does not conform to specification starting at index 0.
        

        帮帮我解决,谢谢!

7 个答案:

答案 0 :(得分:5)

<强>解决

  • 我尝试将base("name=myDbContext")更改为base("server=localhost;user id=root;password=1234;persistsecurityinfo=True;database=dbtest"),但它会抛出错误:&#34;没有名为&#39; myDbContext&#39;的连接字符串可以在应用程序配置文件中找到。&#34;

  • 我一直在搜索并决定将connectionString复制到base: Class `Client` { // implements the actual curl public function get($path, $params = []); } 并且有效。

答案 1 :(得分:1)

嘿所以真正的修复(不是你在这里做的黑客)......

它不会告诉你这个但是标准库(&#34; {DBConnectionName}&#34;)失败的真正原因是因为访问web.config的文件夹上存在权限问题,因为迁移实际上是在不同的用户下运行。

我有这个确切的问题,所以我做的是转到web.config所在的文件夹, 1)右键单击并转到属性 2)转到安全性 3)添加用户,每个人 4)勾选完全控制 5)转到高级 6)勾选用这些替换子对象权限的框 7)点击申请 8)重新运行Add-Migration或Enable-Migration,它将正常工作。

希望这有助于某人!

答案 2 :(得分:0)

  

Data Source = localhost;端口= 3306;初始目录= dbtest; UID =根; PWD = 1234;

这似乎是MS-SQL语法。我不知道MySql是否支持它。尝试:

  

服务器=本地主机;端口= 3306;数据库= dbtest; UID =根; PWD = 1234;

答案 3 :(得分:0)

<connectionStrings>
    <add name="TravelMobileEntities" connectionString="metadata=res://*/ServerDatabaseModel.csdl|res://*/ServerDatabaseModel.ssdl|res://*/ServerDatabaseModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=YS;password=snys19931103;persistsecurityinfo=True;database=travelmobile&quot;" providerName="System.Data.EntityClient"/></connectionStrings>
嗯......我不知道实际问题在哪里。就我而言,我没有使用“Code First”模式。但是“EF with MySQL”。以上是我的连接字符串,它非常好用,希望这对你有帮助。 如果您已经解决了问题,请告诉我它的位置。

答案 4 :(得分:0)

这也解决了我使用Code First和MSSQL的问题。在开发人员IIS中,连接工作时没有将其传递给base(string nameOrConnectionString)参数,但是一旦我发布到IIS,代码就会出现以下错误。 &#34;初始化字符串的格式不符合从索引0和#34;开始的规范。我花了很多时间查看并且大多数其他论坛声明连接字符串会导致此错误,这是真的,但在我的情况下,它不是连接字符串语法中的错误。

public class EntityContext : DbContext
{

    public static EntityContext EntityStatic()
    {
    var entityCnxStringBuilder = new EntityConnectionStringBuilder("");
    var sqlCnxStringBuilder = new SqlConnectionStringBuilder(entityCnxStringBuilder.ProviderConnectionString);
        sqlCnxStringBuilder.DataSource = "DataSource";
        sqlCnxStringBuilder.UserID = "User";
        sqlCnxStringBuilder.Password = "Password";
        sqlCnxStringBuilder.InitialCatalog = "DatabaseName";
        sqlCnxStringBuilder.ConnectTimeout = 10;
        sqlCnxStringBuilder.Enlist = false;
        sqlCnxStringBuilder.Pooling = false;
        sqlCnxStringBuilder.AsynchronousProcessing = true;
        sqlCnxStringBuilder.TrustServerCertificate = true;
        sqlCnxStringBuilder.Encrypt = true;
        conn = sqlCnxStringBuilder.ConnectionString;
        //For reference
        //string conn = "Data Source=localhost;Initial Catalog=;User ID=root;Password=1234;";
        return new EntityContext(conn);
    }

    public EntityContext(string conn) : base(conn)
    {    

    }
}

使用控制器中的此代码

var myEntity = EntityContext.EntityStatic();

答案 5 :(得分:0)

将DAL(DataAccessLayer)连接字符串(从配置文件)复制到UI层的配置文件。并在配置文件中注释DAL的connectionsstring。

答案 6 :(得分:0)

在我们的特殊情况下,我们在单独的项目中拥有DbContext。

尽管使用

在“添加迁移”命令中明确设置了项目,
Add-Migration -Name Migration1 -Project SeparateDbContextProject 

它仍然失败

  

初始化字符串的格式不符合从索引0开始的规范。

仅当将SeparateDbContextProject设置为startup project时,迁移成功。