2017-04-12 13 views
0

SQL ServerデータベースでVisual Studio 2015を使用してシステムを作成しましたが、DBにクエリを実行できますが、変更を保存することはできません。だから私はVisual Studio内のデータベースを作成しました。私は今MySQLワークベンチでデータベースを作成しようとしましたが、同じ問題があります。 My SQL Serverが正しくインストールされているかどうかわからないのでmysqlに切り替えました。私はJavaでプロジェクトに使用していたので、mysqlを正しくインストールしました。 コードの最初のテクニックを使用してデータベースを作成しましたが、これはうまくいきました。何か案は?その後のAppSettings私のレポで私はmysql DBに問い合わせることができますが、変更を保存することはできません

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

私は右の変数がここに来て見ることができます。ビジュアルスタジオのサーバーエクスプローラでデータベース全体がうまく動作しました。 ありがとう!

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

にエンティティの状態を変更することにより

using (var context = new BloggingContext()) { var blog = new Blog { Name = "ADO.NET Blog" }; context.Blogs.Add(blog); context.SaveChanges(); } 

2)?例外の詳細とそのスタックトレースを投稿してください。 –

+0

@EugeneKomisarenko上記の編集をご覧ください。ありがとう – deco

+0

エンティティの状態をModifiedとマークしている行をコメントアウトし、Add(ユーザー)の呼び出し直後にSaveChangesを呼び出すとどうなりますか? –

答えて

0

根本原因: パスワードと塩フィールドは、ブロブとして定義されています。代わりにパスワードと塩分フィールドのタイプをいずれかの文字列タイプに変更してください。

マスキング問題: あなたは正しいかもしれない状況の壊れた内部状態テーブルにそれを追加した後Modifedへのエンティティの状態を変更しました。

MSDNは、テーブルに直接エンティティを追加することにより、コンテキスト https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx

1)に新しいエンティティを追加する2つの異なる方法を推奨しています。あなたはSaveChangesメソッドを呼び出す任意の例外をキャッチしてください追加

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

バイトとして保存することはできません[ ] then?私はバイナリ、varbinary、blob、longblobを成功させようとしましたが、これは現時点で文字列に切り替えるためにプロジェクトに大きな変更を加えるでしょう。 – deco

関連する問題