2017-04-12 68 views
0

我創建了一個系統使用Visual Studio 2015與SQLServer數據庫,我可以查詢數據庫但不保存更改。所以我在Visual Studio中創建了數據庫。我現在試圖在MySQL工作臺中創建數據庫,並且有相同的問題。我切換到MySQL,因爲我不確定我是否正確安裝了My SQL Server,我已經正確安裝了mysql,因爲我已經在Java中使用它。 我使用代碼優先技術創建了數據庫,這工作得很好。有任何想法嗎?從AppSettings的我可以查詢mysql數據庫但不保存更改

"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)...

更新:當我註釋掉我的數據被傳遞爲Byte []時有效。

+1

你趕上,當你調用的SaveChanges任何異常?如果有,請發佈該異常的詳細信息及其堆棧跟蹤。 –

+0

@EugeneKomisarenko請參閱上面的修改。謝謝 – deco

+0

當你註釋掉實體狀態爲修改狀態的行並且在調用Add(user)後立即調用SaveChanges會發生什麼? –

回答

0

根本原因: 密碼和鹽字段被定義爲斑點。改變密碼和salt字段的類型爲其中一種字符串類型。

遮蔽的問題: 你被它添加到表之後改變實體體改的狀態,這可能會破壞環境的內部狀態。

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(); 
} 
+0

是不是可以將它們存儲爲Byte [ ]然後?我已經嘗試過二進制,varbinary,blob和longblob沒有成功。它將會對我的項目進行實質性的改變,在這一點上切換到字符串。 – deco