Entity Framework(EF)Data Scaffoldingによって構築されたCRUD操作を使用して最初のASP.NETMVC 5プログラムを作成していますが、子が追加、更新、または削除されたときに親テーブルを更新する方法について質問があります。各子レコードにuserIDとupdateDateを作成しない子テーブル。
親テーブルにuserIDフィールドとupdateDateフィールドがあります。子テーブルでCUD操作(追加、更新、または削除)を行う場合、レコードが変更されたユーザー/日時を反映するように、userIDとupdateDateで親テーブルを更新したいと思います。EFデータスキャフォールディングを使用してこれを行うにはどうすればよいですか?私はMVCとEFの経験があまりないので、コントローラーでこれがどのように行われるかをコードで示していただければ幸いです。今のところ、特定のビューの個々のテーブルのモデルを使用して、EFデータスキャフォールディングで新しい子レコードを追加できます。いくつかの検索を行い、複数のテーブルが両方ともビューモデルにある場合、それらを使用してモデルバインディングを介してこれを行う方法を見つけましたが、EFデータスキャフォールディングを使用して親テーブルを更新する他の方法があるかどうか疑問に思いました子テーブルに追加または更新します。SaveChanges(false)とAcceptAllChanges()の使用に関する記事も見つかりました。これは、子レコードを追加または更新した後に親レコードを更新する方法を理解すると役立つ場合があります。よろしくお願いします。
コントローラ:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "crossWalkID, location,
widthOfLeg, legDirection, crosswalkType, qtyBasicOrHatched12,
qtyLadderBar16, qtyLadderBar24, cost")] tblStripingQuantity
tblStripingQuantity)
{
// Also update UserID & UpdateDate in the tblCrossWalk when
// tblStrippingQuantity is updated successfully - Where to do this???
if (ModelState.IsValid)
{
db.tblStripingQuantities.Add(tblStripingQuantity); // Add a new child record
// to child table
db.SaveChanges();
return RedirectToAction("Index", "tblCrosswalks", new { id =
tblStripingQuantity.crosswalkID });
}
return View(tblStripingQuantity); // ModelState is invalid; return to view
}
したがって、Assilの回答に基づくと、ActionResultは次のようになります。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "crossWalkID, location,
widthOfLeg, legDirection, crosswalkType, qtyBasicOrHatched12,
qtyLadderBar16, qtyLadderBar24, cost")] tblStripingQuantity
tblStripingQuantity)
{
if (ModelState.IsValid)
{
// Add a new child record to child table
db.tblStripingQuantities.Add(tblStripingQuantity);
//Gets crosswalk parent record and updates UserID and Date
var crossWalk = db.tblCrossWalk.Find(tblStripingQuanity.crossWalkID);
crossWalk.UserID = 1234;
crossWalk.UpdateDate = DateTime.Now;
db.SaveChanges();
return RedirectToAction("Index", "tblCrosswalks", new { id =
tblStripingQuantity.crosswalkID });
}
return View(tblStripingQuantity); // ModelState is invalid; return to view
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加