我使用带有SQLServer数据库的Visual Studio 2015创建了一个系统,我可以查询数据库但不保存更改。所以我在Visual Studio中创建了数据库。我现在尝试在MySQL工作台中创建数据库并遇到同样的问题。我切换到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);
在我的回购中
public bool CreateUser(UserAccount user)
{
if (user != null)
{
try
{
_Context.UserAccounts.Add(user);
_Context.Entry(user).State = EntityState.Modified;
_Context.SaveChanges();
return true;
}
catch ....
我可以看到正确的变量来到这里。这一切都与visual studio服务器资源管理器中的数据库完美配合。 谢谢!
IndexOutOfRangeException:索引超出了数组的范围。
堆栈跟踪:在Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection连接)
在Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(元组2 parameters)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList
1 entriesToSave)...
UPDATE:当我注释掉我作为Byte []传递的数据时工作。
答案 0 :(得分:0)
根本原因: 密码和盐字段定义为blob。将密码和salt字段的类型更改为其中一种字符串类型。
屏蔽问题: 在将实体的状态添加到表中后,您正在将实体的状态更改为Modifed,这可能会破坏上下文的内部状态。
MSDN建议将两种不同的方法添加到上下文中 https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx
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();
}