我可以查询mysql DB但不保存对它的更改

时间:2017-04-12 16:33:45

标签: c# mysql .net visual-studio

我使用带有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 []传递的数据时工作。

1 个答案:

答案 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(); 
}