0
public class Class1 
{ 
    public Guid Class1ID { get; set; } 
    public string class1string { get; set; } 
    public virtual Class2 Class2 { get; set; } 
} 

public class Class2 
{ 
    public Guid Class2ID { get; set; } 
    public string class2string { get; set; } 
} 

// POST: Class1/Edit/5 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Edit(Guid id, [Bind("Class1ID,Class2,class1string")] Class1 class1) 
    { 
     if (id != class1.Class1ID) 
     { 
      return NotFound(); 
     } 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       _context.Update(class1); 
       await _context.SaveChangesAsync(); 
      } 
      catch (DbUpdateConcurrencyException) 
      { 
       if (!Class1Exists(class1.Class1ID)) 
       { 
        return NotFound(); 
       } 
       else 
       { 
        throw; 
       } 
      } 
      return RedirectToAction("Index"); 
     } 
     return View(class1); 
    } 

子テーブルにあるデータを編集するのではなく、テーブルに新しい行を作成し、親テーブルのGUIDを変更します。親テーブルが正しく編集されています。一対多リレーションシップが子テーブルを編集していない

ご協力いただきますようお願い申し上げます。

+0

を修正したspesifyする必要があります。 _context.Updateメソッドを呼び出す前に_context.Entry(class1.Class2).State = EntityState.Modifiedを実行してみてください。私はclass1.Class2が適切なGUIDセットを持っていると仮定しています – Developer

答えて

0

私もこの問題に苦労しています。

私は編集をし、私はタスクの編集(GUID番号、[バインド( "Class1ID、クラス2、class1string")]のClass1クラス1)(あなたが期待するよう)非同期(async)はパブリック関数を打つ、それを保存する -

すべての値はを除いSaveChangesAsyncがEFと呼ばれる結果として空のGUID {00000000-0000-0000-0000-000000000000}

あるために新たなレコードを作成class1.Class2.Class2ID正しいですClass2、既存のものを更新するのではなく意図した通りに記録する。

バインドに失敗したため、Class2.Class2IDの値が見つかりません。

を取得すると、ほとんどのページにこの値が読み込まれないためです。

は、これが動作するように結合を有効にする必要があります(次=「隠された」ASP-用=「Class1ID」入力タイプに示唆)

<input type="hidden" asp-for="Class2.Class2ID" /> 

ビューのマークアップに次の行を追加します。

こちらがお役に立てば幸いです。

1

クラス1にも、主キーのプロパティと一致する外部キーIDを追加します。 EFは、あなたがちょうどあなたが正しいClass2IDプロパティを渡すとナビゲーションオブジェクトのプロパティClass2心配しないでチェックする必要がありclass1あなたのアップデートでその関連

public class Class1 
{ 
    public Guid Class1ID { get; set; } 
    public string class1string { get; set; } 
    public Guid? Class2ID { get; set; } 
    [ForeignKey("Class2ID ")]//probably not needed as names match 
    public virtual Class2 Class2 { get; set; } 
} 

public class Class2 
{ 
    public Guid Class2ID { get; set; } 
    public string class2string { get; set; } 
} 

その方法を知っています。節約のために

は、あなたはそれがEntityStateクラス2のオブジェクトが追加された状態になる場合がありますので、これはある

public async Task<IActionResult> Edit(Class1 class1) 
{ 
    ... 
    _context.Entry(class1).State = EntityState.Modified; 
    await _context.SaveChangesAsync(); 
関連する問題