1

アクティブなレコードで ASP MVC を使用する。

関連するレコードと関連しないレコードを含む 2 つのテーブルがあります。関係はユーザーによって定義されます。1 つのテーブルにはプロジェクトがあり、もう 1 つのテーブルにはデバイスがあります。プロジェクトは作成および削除できますが、デバイスはできません。ユーザーがプロジェクトを削除すると、そのプロジェクトとデバイスの間のすべての関係が削除されますが、デバイスは残る必要があります。

どうすればいいですか?

私の削除アクションは現在次のようになっています:

public ActionResult Delete(int id, FormCollection collection)
  {
     if (!Project.Exists(id)) return RedirectToAction("Index/1", "Error");

     try
     {
        Project project = Project.Find(id);


        if (project.User.Id != SessionVariables.AuthenticatedUser.Id) return RedirectToAction("Index/1", "Error");

        project.DeleteAndFlush();

        return RedirectToAction("Index", "Project");
     }
     catch(Exception e)
     {
        return RedirectToAction("Index", "Error");
     }
  }
4

1 に答える 1

0

私が正しく理解していれば、プロジェクト テーブルからプロジェクトが削除されたときに、プロジェクト デバイス マッピング テーブルのすべてのエントリを削除したいですか? (別の質問からの多対多の関係を使用していると思います)。

その場合は、コードでこれを手動で実行するのではなく、データベース トリガーを使用することをお勧めします。プロジェクトがプロジェクト テーブルから削除されたときに、マッピング テーブル内の特定のプロジェクトのすべての行を削除するトリガーを作成できます。次のような MS SQL を使用している場合:

CREATE TRIGGER trig_deleteProjectDevice
ON projectTable
FOR DELETE
AS
DECLARE @projectID INT
SELECT @projectID = (SELECT projectId FROM Deleted)
DELETE FROM projectDeviceMappingTable WHERE projectId = @projectID
于 2010-10-08T08:03:58.030 に答える