C#和#x2B;MySql+;代码优先:初始化字符串的格式不符合从索引0开始的规范
我已经创建了一个库项目来连接MySQL数据库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.Data
,MySql.Data.Entity.EF6
EntityFramework
MyContext.cs
:
嗯……我不知道真正的问题在哪里。在我的例子中,我没有使用“代码优先”模式。但是“EF与MySQL”。以上是我的连接字符串,工作非常好,希望这可以帮助你。
如果您已经解决了问题,请告诉我它在哪里。已解决
- 我试图将
更改为base(“myDbContext”)
,但它抛出了一个错误:“在应用程序配置文件中找不到名为“myDbContext”的连接字符串。”base(“name=myDbContext”)
- 我一直在搜索并决定将connectionString复制到base:
成功了base(“server=localhost;user id=root;password=1234;persistentsecurityinfo=True;database=dbtest”)
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