【问题标题】:ASP MVC Delete only the relation between 2 tables (many-to-many relation)ASP MVC 只删除两个表之间的关系(多对多关系)
【发布时间】:2011-04-22 07:26:27
【问题描述】:

使用带有活动记录的 ASP MVC。

我有 2 个表,其中的记录有时相关,有时不相关。关系由用户定义。一张桌子有项目,另一张桌子有设备。可以创建和删除项目,设备不能。当用户删除一个项目时,该项目与设备之间的所有关系都应删除,但设备应保留。

我该怎么做?

我的删除操作目前如下所示:

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");
     }
  }

【问题讨论】:

  • 这与 MVC 有什么关系?

标签: sql asp.net-mvc database database-relations


【解决方案1】:

所以如果我理解正确,当从项目表中删除项目时,您想删除项目设备映射表中的所有条目? (我假设您正在使用来自另一个问题的多对多关系)。

如果是这种情况,我建议您使用数据库触发器,而不是尝试在代码中手动执行此操作。当从项目表中删除项目时,您可以创建一个触发器,该触发器会删除映射表中特定项目的所有行。如果您使用的是 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

【讨论】:

    猜你喜欢
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多