2016-10-05 10 views
0

MVC Webページを介してテーブルに値を挿入しようとしています。 Visual Studioで生成されたlocalDBのWebページを実行しているときに、このエラーは発生しませんでした。私はリモートデータベースに移行して以来、私は今このエラーを取得しています。MVC&SQL:新しいデータベースに移行した後にNULL値を列に挿入できません

カラム 'DRTReviewerId'、テーブル 'FC.Developer_Schema.DRTReviewers'に値NULLを挿入できません。列はNULLを許可しません。 INSERTは失敗します。 ステートメントが終了しました。ここで

は、コードの問題の一部です:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "DRTReviewerId,Name")] DRTReviewer dRTReviewer) 
    { 
     if (ModelState.IsValid) 
     { 
      db.DRTReviewers.Add(dRTReviewer); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(dRTReviewer); 
    } 

DRTReviewerIdの値は、コードによって生成されたint型はなりませんが、私は、データベースを切り替えるので、これはもはや発生しています。この変化の原因は何でしたか?

コードはエンティティフレームワークを使用して完全に生成されました。私の知識MVCは最高で初心者です。

+1

2つのデータベース(ローカルDBとサーバーDB)が明確に同一の構造を持っていません。リモートDBのテーブルスキーマをチェックして、エンティティフレームワークが期待しているものと一致するかどうかを確認します。おそらく、DRTReviewerId列に「not null」と表示されています。つまり、null値は許可されていません。これは、テーブルのPKフィールドであり、テーブルデザインの自動インクリメントフィールドとしてマークする必要があります。 (通常、この種のIDを生成するのはC#コードではなく、データベースエンジンです)。 – ADyson

+0

また、C#コードからIDフィールドが提供されることを期待している場合は、(a)値が実際にDBに渡されていることを確認するか、(b)空のIDが許可されている場合は、フィールドをNULLにすることができます(ローカルDBを比較して何が違うかを確認できます) – ADyson

+0

プライマリキーとして設定しましたが、自動インクリメントに設定するにはどうすればよいですか? –

答えて

1

テーブル、リモート・データベース内の主キーまたは「DRTReviewerId」列に作成される一意のキーのいずれかを持っています。したがって、それはヌルを受け入れていません。リモートDBのテーブルスキーマを更新します。

プライマリキーの自動インクリメントを行うには、ID仕様 - >アイデンティティが真、IDインクリメントが1(DRTReviewerId列プロパティの場合)に設定する必要があります。

enter image description here

-1

私は、詳細なエラー情報を参照してみてくださいキャッチに)(db.SaveChangesをラップします:

try{ 
     db.SaveChanges(); 
} 
catch (DbEntityValidationException vex) 
{ 
     // Write to log file if you have logging support 
     Debug.WriteLine(HandleDbEntityValidationException(vex)); 
     throw; 
} 
catch (DbUpdateException dbu) 
{ 
     // Write to log if you have logging support 
     Debug.WriteLine(HandleDbUpdateException(dbu)); 
     throw; 
} 
+0

これはデバッグに役立つかもしれませんが、実際の問題に対する答えは実際にはありません – ADyson

+0

@ADyson:デバッグに役立つと私は思っていますが、ここで何をしているのでしょうか(savechangesが例外を投げている理由を理解する)。私は、リモートボックスを使って作業しているときに何が起こっているかをすぐに把握するための最良の方法を感じています。 – sam

関連する問題