2017-03-13 7 views
-1

私はEntity Frameworkを使用するASP.NET MVCアプリケーションで、保存中に奇妙な動作を発見しました。私は、データベースの顧客が存在するかどうかを確認するビューを持っています。そうであれば、そのデータがテーブルに表示されます。正常に動作します。ユーザーはテーブルに多くの顧客を追加することができます。小さな例:エンティティフレームワーク:EFは常に古い値の "上に"値を保存します

データベースには顧客JohnとJimが含まれています。それらは表に表示されます。ユーザーは2人の顧客をテーブルに追加します:PeterとJack、テーブルには顧客が含まれているはずです:John、Jim、PeterとJack。

だから、今私のコントローラに保存するとどうなるでしょう。保存されている顧客は、John、Jim、John、Jim、Peter、Jackです。 Entity Frameworkはこれまでの顧客のトップに追加しているようですが、私が望むものではないので、テーブルに表示されているように顧客を保存したいだけです。あなたが私にこれを助けてくれることを願っています。ここで

は、顧客を保存するために私のコントローラのコードです:ここで

var counter = 0; 
string customerName = ""; 

while (true) 
{ 
customerName = Request.Form["CustomerName[" + counter + "]"]; 
if (customerName == "" || customerName == null) 
{ 
    break; 
} 
Customer customer = new Customer(); 
customer.OverviewID = CustomerOverview.ID; 
customer.Name = customerName; 
db.Customer.Add(customer); 
db.SaveChanges(); 
counter++; 
} 

は私がビュー内のテーブルに既存の顧客を追加する方法である:

@{ 
    if (Model.Customers.Count() > 0) 
    { 

     foreach (var customer in Model.Cusomters) 
     { 
      <text>ArrayCustomers.push("@(customer.Name)");</text> 
     } 
    } 
    else 
    { 
      <text>ArrayCustomers.push("");</text> 
    } 
} 
    refresh_table(); 
+0

表にどのように表示されるかは、テーブルの構成方法と使用するRDBMSによって異なります。 'OrderBy'を使うだけでそれらを表示することができます –

答えて

0

あなたがIDを追加する必要がありますすでに存在するテーブルの各顧客について次に、顧客が既に保存されているかどうかを尋ねるか、顧客がIDを持っている場合にフィルタリングできます。顧客がIDを持っていない場合、それは新しいので保存します。

mvcを使用しているので、要求の値を取得する代わりに、顧客のコレクションを投稿してモデルバインディングを使用することをお勧めします。

1

動作はまったく変わっていません。あなたのコードには、「フォームの各名前には、そこに表示されている名前を追加してください。フォームには既に存在する2つのエントリの名前がリストされます。おそらくフォームフィールドにあります。したがって、ページが読み込まれたときに最初の2つのフォームフィールドに(手動ではなく)コードを入力してから、別の2つの名前を入力すると、EFはそれぞれ合計4つの名前を追加します。あなたのDBは6つの名前と2つの重複で終わる。

これを回避する方法は、既にフォームフィールドにある名前を読み込むことではありません。そうすれば、送信ボタンをクリックしても送信されません。あなたのページに表示しているアイテムは@DisplayFor、追加したいアイテムは@EditorForにする必要があります。

あなたの質問に関連しています - 私はあなたが通常のMVCパターンに従っていない理由はわかりませんが、そうでない場合はあなたの悲惨さに加わります。あなたのフォームのHTMLコードがどのようなものかをリストしていないので、おそらくあなたの質問はdownvotedになっています。

関連する問題