C#和#x2B;MySql+;代码优先:初始化字符串的格式不符合从索引0开始的规范

C#和#x2B;MySql+;代码优先:初始化字符串的格式不符合从索引0开始的规范,c#,mysql,entity-framework,C#,Mysql,Entity Framework,我已经创建了一个库项目来连接MySQL数据库 包括Nuget=>OK的MySql.Data,MySql.Data.Entity.EF6 Nuget=>OK安装的EntityFramework 我创建了一个MyContext.cs: 帮我解决,谢谢 数据源=本地主机;端口=3306;初始目录=dbtest;uid=根;pwd=1234 这似乎是MS-SQL语法。我不知道MySql是否支持它。尝试: 服务器=本地主机;端口=3306;数据库=dbtest;uid=根;pwd=1234 嗯……我不

我已经创建了一个库项目来连接MySQL数据库

  • 包括Nuget=>OK的
    MySql.Data
    MySql.Data.Entity.EF6
  • Nuget=>OK安装的
    EntityFramework
  • 我创建了一个
    MyContext.cs
  • 帮我解决,谢谢

    数据源=本地主机;端口=3306;初始目录=dbtest;uid=根;pwd=1234

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

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

    
    
    嗯……我不知道真正的问题在哪里。在我的例子中,我没有使用“代码优先”模式。但是“EF与MySQL”。以上是我的连接字符串,工作非常好,希望这可以帮助你。
    如果您已经解决了问题,请告诉我它在哪里。

    已解决

    • 我试图将
      base(“myDbContext”)
      更改为
      base(“name=myDbContext”)
      ,但它抛出了一个错误:“在应用程序配置文件中找不到名为“myDbContext”的连接字符串。”

    • 我一直在搜索并决定将connectionString复制到base:
      base(“server=localhost;user id=root;password=1234;persistentsecurityinfo=True;database=dbtest”)
      成功了


    这也解决了我使用代码优先和MSSQL的问题。在developer IIS中,连接工作时没有将其传递到
    base(string name或connectionstring)
    参数,但一旦我发布到IIS,代码就会出现以下错误。“初始化字符串的格式不符合从索引0开始的规范”。我花了很多时间查看,大多数其他论坛都声明连接字符串导致了这个错误,这是真的,但在我的例子中,这不是连接字符串语法中的错误

    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();
    
    将DAL(DataAccessLayer)连接字符串(从配置文件)复制到UI层的配置文件。并在配置文件中注释DAL的ConnectionString。

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

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

    我遇到了这个问题,所以我转到了web.config所在的文件夹, 1) 右键单击并转到属性 2) 转到安全 3) 添加用户,所有人 4) 勾选完全控制 5) 后藤高级 6) 勾选表示用这些替换子对象权限的框 7) 点击应用 8) 重新运行添加迁移或启用迁移,它将正常工作


    希望这对别人有帮助

    在我们的特殊情况下,我们在一个单独的项目中使用了DbContext

    尽管在addmigration命令中使用

    Add-Migration -Name Migration1 -Project SeparateDbContextProject 
    
    它仍然以失败告终

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


    只有当
    SeparateDbContextProject
    被设置为a时,迁移才成功。

    谢谢,我改成了MySQL语法,但它仍然有这些错误:(所以,这意味着应该用整个连接字符串创建DbContext,但不能从配置文件中读取,对吗?我想是这样,但只针对MySQL连接:)好的,我明白了。非常感谢。@Damien_不信者谢谢,我编辑了它!这实际上解决了我的问题。我不知道怎么做;我不知道为什么,但它做到了。实际上,我以前没有显式调用基构造函数,但它也可以工作。不过这次我不得不这么做。
    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();
    
    Add-Migration -Name Migration1 -Project SeparateDbContextProject