【问题标题】:How to delete rows of two different table having same id mvc如何删除具有相同 id mvc 的两个不同表的行
【发布时间】:2017-04-23 16:02:23
【问题描述】:

我正在做一个项目,其中我有两个表代理和用户。用户表包含一个名为 agentid 的外键,它从代理表的 id 中获取值。所以在这里我需要删除代理表中的一个代理,同时它必须影响用户表,并且必须删除用户表中与被删除的代理具有相同 ID 的行。例如,假设如果我从代理表中删除代理 10,则必须删除 id 10 中的所有详细信息,同时也必须删除用户表中的代理 ID 为 10。当我简单地删除代理表中的代理时,它会生成一个错误

The DELETE statement conflicted with the REFERENCE constraint

我不知道如何解决我的问题,我的代码是

控制器

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(int id)
{
   AgentMaster agentMaster = await db.AgentMasters.FindAsync(id);
   db.AgentMasters.Remove(agentMaster);
   await db.SaveChangesAsync();
   return RedirectToAction("Index");
}

型号

 public partial class AgentMaster
{
    public AgentMaster()
    {
        this.Users = new HashSet<User>();
    }

    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

数据库上下文

 public NewEntities()
        : base("name=NewEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
        modelBuilder.Entity<AgentMaster>()
        .HasOptional(c => c.Users)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
    }

这是我的控制器部分,当我尝试加入表并删除记录时,它总是显示相同的错误。谁能帮我找到解决我问题的方法??????

【问题讨论】:

  • 你能展示一下 AgentMaster 模型吗?
  • 在我的问题中包含了模型
  • 首先你必须删除所有与 agerntmaster 相关的用户然后你可以删除 agentmaster

标签: asp.net-mvc linq asp.net-mvc-4 lambda http-post


【解决方案1】:

如果您使用 SQL Server for Database,则只需打开 SQL Management Studio 并为已定义外键关系的列打开关系窗口。有一个选项 Insert And Update Specification,展开它,对于 Delete Rule,选择 Cascade 选项。

对于您的方案,在进行这些更改后,如果您从agent 表中删除agent id,那么它将自动删除您的user 表中此agent id 引用的数据。

【讨论】:

    【解决方案2】:

    当您的表依赖于另一个表时,会发生此错误,在您的情况下,它的 one to many 关系 所以把这个添加到你的dbcontext

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AgentMaster>()
        .HasOptional(c => c.Users)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
    }
    

    【讨论】:

    • 对不起,我没有得到这个答案,你能解释一下这个或者这个覆盖 OnModelCreating(DbModelBuilder modelBuilder) 是什么,没有得到那行我如何用我的代码更改那部分?
    • 您只需在 dbcontext 中添加此内容即可查看此内容DbContext.OnModelCreating Method
    • @user355 在您向 db.AgentMasters 展示的代码中,您如何初始化数据库?
    • 私有 A.db = new A();
    • A 是你的 dbcontext?
    【解决方案3】:

    您在 asp.net 上没有任何活动,但您可以在 dbms 中的两个表之间的关系上启用 Cascade 选项。

    【讨论】:

    【解决方案4】:

    您不能直接删除一个表的记录,该表正被另一个具有外键的表引用。

    您必须显式删除用户表的相关行,或者您可以使用 ON DELETE CASCADE 自动删除用户表的行。

    【讨论】:

    • 您能解释一下如何进行这种级联删除吗?抱歉,因为我是 mvc 新手,没有完全了解如何执行此删除操作
    猜你喜欢
    • 2012-01-25
    • 2022-08-11
    • 1970-01-01
    • 2022-01-21
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多