2016-07-01 1 views
0

したがって、かなりシンプルなコントローラを備えたかなりシンプルなモデルがあります。私の見解は、コントローラにTabularDataレコードを正常に渡します。コンテキストに追加する動作を経て、SaveChangesに表示されます。エラーや何も起こりません。しかし、データベースをチェックすると、そのレコードはテーブルに存在しません。なぜ私は私の人生のために理解することはできません。同じレコードを再度挿入しようとすると、キー違反エラーが発生します。私はレコードをSQLに挿入すると、VSのサーバーエクスプローラーでテーブルをクエリすると表示されるため、モデルが正しいデータベースに接続されていると確信しています。ActionResultがデータベースにレコードを永続させないのはなぜですか?

namespace ReflectionProject.Models 
{ 
    public class TabularData 
    { 
     [Key] 
     public string User { get; set; } 
     public string Choice1 { get; set; } 
     public string Choice2 { get; set; } 
     public string Choice3 { get; set; } 
     public string Choice4 { get; set; } 
     public string Choice5 { get; set; } 
    } 

    public class SandboxDBContext : DbContext 
    { 
     public DbSet<TabularData> TabularDatas { get; set; } 
    } 
} 

そして、ここでは、コントローラの::

ここに私のモデルのそれは、このような簡単な操作のように思えるが、私は...私が間違ってやっているかを把握しようとしている

を私の頭を悩まよ

namespace ReflectionProject.Controllers 
{ 

    public class HomeController : Controller 
    { 
     private SandboxDBContext db = new SandboxDBContext(); 
     [HttpGet] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public string Index(TabularData td) 
     { 
      db.TabularDatas.Add(td); 
      db.SaveChanges(); 
      return "Thanks!"; 
     } 
    } 
} 

もう1つのメモ:レコードをもう一度挿入しようとすると、キー違反が発生します。しかし、SQL Serverに手動でレコードを挿入しても、それは不平を言うことはありません。そして、私はモデルが正しいDBを指していると確信しています。

+0

[Key] [Key、DatabaseGenerated(DatabaseGeneratedOption.None)]の代わりにキーフィールドにこれを追加してみてください。 – JamieD77

答えて

1

Userをプライマリキーとして使用しています。これは、テーブルにユニークな制約を追加することになります。現在のデザインでは、ユーザーあたり1つのレコードしか作成できません。

+0

ええ、それは問題ありません。それはサンドボックスのテストソリューションなので、私はもののためにそれで涼しいです。しかし、私はまだレコードが保存されない理由を理解できません。 – Hill

+0

接続文字列は正しいですか? –

+0

サーバーエクスプローラに移動すると、自分のデータベースとテーブルが表示され、ライブデータでクエリが実行されるからです。 SSMSでレコードを挿入すると、VSに戻り、「テーブルデータを表示」と言うことができます。データがあります。モデルとデータの間に何かがある場合を除き、しかし、DbContextは自動的にそれらをすべて処理するべきではありませんか? – Hill

0

私は自分のプロジェクトを削除してからやり直しました。今回は、モデルにDbContextクラスとDataクラスを作成しました。なぜそれが前にそれをしなかったか分かりませんが、悲しいかな、それは私の解決です。マイクロソフトでは私のawesomenessに追いつくことができないので、私はそれを気にして始めた。

関連する問題