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