Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# 我可以查询mysql数据库,但不能保存对它的更改_C#_Mysql_.net_Visual Studio - Fatal编程技术网

C# 我可以查询mysql数据库,但不能保存对它的更改

C# 我可以查询mysql数据库,但不能保存对它的更改,c#,mysql,.net,visual-studio,C#,Mysql,.net,Visual Studio,我使用VisualStudio2015和SQLServer数据库创建了一个系统,我可以查询数据库,但不能保存对数据库的更改。所以我在VisualStudio中创建了数据库。我现在尝试在MySQL workbench中创建数据库,但遇到了同样的问题。我切换到mysql,因为我不确定是否正确安装了SQL Server,我肯定正确安装了mysql,因为我在Java项目中使用了它。 我使用代码优先技术创建了数据库,效果很好。有什么想法吗? 来自appsettings的连接字符串 "DataAccessM

我使用VisualStudio2015和SQLServer数据库创建了一个系统,我可以查询数据库,但不能保存对数据库的更改。所以我在VisualStudio中创建了数据库。我现在尝试在MySQL workbench中创建数据库,但遇到了同样的问题。我切换到mysql,因为我不确定是否正确安装了SQL Server,我肯定正确安装了mysql,因为我在Java项目中使用了它。 我使用代码优先技术创建了数据库,效果很好。有什么想法吗? 来自appsettings的连接字符串

"DataAccessMySqlProvider": "server=localhost;port=3306;database=rentalsdb;userid=root;password=******"
在Startup.cs中

            var sqlConnectionString = Configuration.GetConnectionString("DataAccessMySqlProvider");
        services.AddMvc();
        services.AddDbContext<RentalsDbContext>(options =>
    options.UseMySQL(
        sqlConnectionString,
        b => b.MigrationsAssembly("RentalsRated.Web")));

        services.AddDbServiceDependencies(sqlConnectionString);
我可以看到正确的变量出现在这里。在VisualStudio服务器资源管理器中使用数据库时,一切都很好。 谢谢

IndexOutOfRangeException:索引超出了数组的边界

堆栈跟踪:位于Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection) 位于Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(元组
2个参数)
在Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList
1 entriesToSave)


更新:当我注释掉作为字节[]传递的数据时起作用

根本原因: 密码字段和盐字段定义为blob。将密码和盐字段的类型改为字符串类型之一

屏蔽问题: 在将实体添加到表中之后,您正在将实体的状态更改为Modifyd,这可能会损坏上下文的内部状态

MSDN建议使用两种不同的方式向上下文中添加新实体

1) 通过将实体直接添加到表中

using (var context = new BloggingContext()) 
{ 
    var blog = new Blog { Name = "ADO.NET Blog" }; 
    context.Blogs.Add(blog); 
    context.SaveChanges(); 
}
2) 通过将实体的状态更改为“已添加”

using (var context = new BloggingContext()) 
{ 
    var blog = new Blog { Name = "ADO.NET Blog" }; 
    context.Entry(blog).State = EntityState.Added; 
    context.SaveChanges(); 
}

调用SaveChanges时是否捕获任何异常?如果是,请发布异常的详细信息及其堆栈跟踪。@EugeneKomisarenko请参见上面的编辑。感谢注释掉标记实体状态为已修改的行,并在调用Add(user)后立即调用SaveChanges时会发生什么情况?{System.IndexOutOfRangeException:Index超出了数组的边界。at MySql.Data.Types.MySqlBinary.escapebyterarray(Byte[]bytes,Int32长度,MySqlPacket数据包)在MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket包,布尔二进制,Object val,Int32 length)在MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket包,布尔二进制,MySqlConnectionStringBuilder设置)在MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection参数、MySqlPacket数据包、字符串parmName、Int32参数索引…@EugeneKomisarenko我现在明白了。将salt和密码存储为blob是个问题。我应该对列类型使用什么?是否可以将它们存储为Byte[]然后呢?我尝试了binary、varbinary、blob和longblob,但没有成功。此时切换到字符串将对我的项目产生重大影响。谢谢
using (var context = new BloggingContext()) 
{ 
    var blog = new Blog { Name = "ADO.NET Blog" }; 
    context.Entry(blog).State = EntityState.Added; 
    context.SaveChanges(); 
}