2017-03-01 59 views
1

シナリオプロパティは、オブジェクトのキー情報の一部であり、変更することはできませんし、私はそれを修正NEEDto

私は(彼らは主キーです)複数のIDを入力するプログラムに取り組んで、一度詳細を入力していますしたがって、PA1、PA2、PA3を入力すると、同じ詳細を持つものをすべて保存する必要があります。これを達成するために、私はIDを文字列に渡した後、同じ詳細を入力しながらIDごとにIDを変更するつもりでそれぞれを行います。あなたは私のコードで見ることができるように

public async Task<ActionResult> MassCreate([Bind(Include = " refno,rec_fname,rec_lname,signature,date,time")] delivery delivery, string hiddenIDnumber) 
    { 
     if (ModelState.IsValid) 
     { 
      hiddenIDnumber= hiddenIDnumber.Trim(); 

      List<string> listStrLineElements = hiddenIDnumber.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
      foreach (string str in listStrLineElements) 
      { 
       delivery.refno = str; 
       db.dbo_delivery.Add(delivery); 
       await db.SaveChangesAsync(); 
      } 

      // db.dbo_delivery.Add(dbo_delivery); 
      // await db.SaveChangesAsync(); 
      return RedirectToAction("Success", "Delivery"); 
     } 

エラー プロパティ「REFNOは」オブジェクトのキー情報の一部であり、変更することはできません。

は、refnoがプライマリキーであるために表示されるエラーです。

読解担当者はCommon.DataContext.Detach(object);を使用してこれを解決しましたが、これを実装する方法は不明です。

ご協力いただければ幸いです。

よろしくお願いします。

答えて

0

プライマリキーを更新することは非常に悪い方法です。その値を変更する必要がある場合は、そのプロパティを主キーとして使用するかどうかを真剣に検討する必要があります。

  1. ストップrefno主キーであることと、もう一つ(例えばint型Idプロパティ)を追加しますので、次の2つのオプションがあります。ただし、refnoの値に一意の制約を付けることができます。
  2. エンティティを更新する代わりに、新しいエンティティを追加して古いエンティティを削除します。
+0

私は主キーを更新することを躊躇します。私は主キーを変更して同じデータをもう一度入力します。いずれにしても、#2をやり遂げるにはどうすればいいですか –

+0

主キーの更新とは言わないが、次の文は主キーの変更だけです。 – DavidG

+0

私の主キーを変更しました。はるかに簡単 –

関連する問題