Asp.net mvc 如何删除具有相同id的两个不同表的行mvc

Asp.net mvc 如何删除具有相同id的两个不同表的行mvc,asp.net-mvc,linq,asp.net-mvc-4,lambda,http-post,Asp.net Mvc,Linq,Asp.net Mvc 4,Lambda,Http Post,我正在做一个项目,其中我有两个表代理和用户。用户表包含一个名为agentid的外键,该外键从代理表的id中获取值。因此,这里我需要删除代理表中的一个代理,同时它必须对用户表生效,并且必须删除用户表中具有已删除代理的相同id的行。例如,假设我从代理表中删除了代理10,则id 10中的所有详细信息都必须删除,同时用户表中带有10的代理也必须删除。当我简单地删除代理表中的代理时,它会生成一个错误 The DELETE statement conflicted with the REFERENCE co

我正在做一个项目,其中我有两个表代理和用户。用户表包含一个名为agentid的外键,该外键从代理表的id中获取值。因此,这里我需要删除代理表中的一个代理,同时它必须对用户表生效,并且必须删除用户表中具有已删除代理的相同id的行。例如,假设我从代理表中删除了代理10,则id 10中的所有详细信息都必须删除,同时用户表中带有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");
}
[HttpPost,ActionName(“删除”)]
[ValidateAntiForgeryToken]
公共异步任务删除已确认(int-id)
{
AgentMaster AgentMaster=等待db.AgentMasters.FindAsync(id);
db.AgentMasters.Remove(agentMaster);
等待db.saveChangesSync();
返回操作(“索引”);
}
模型

公共部分类代理主程序
{
公共代理主管()
{
this.Users=new HashSet();
}
公共int ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共虚拟ICollection用户{get;set;}
}
DbContext

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
        modelBuilder.Entity<AgentMaster>()
        .HasOptional(c => c.Users)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
    }
public新实体()
:base(“名称=新实体”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
modelBuilder.Entity()
.has可选(c=>c.Users)
.WithOptionalDependent()
.WillCascadeOnDelete(真);
}

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

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

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


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

如果您使用SQL Server for Database,则只需打开SQL Management Studio并打开定义了外键关系的列的关系窗口即可。有一个选项Insert And Update SPECIATION,将其展开,并为Delete Rule选择Cascade选项


对于您的场景,在进行这些更改之后,如果您从
agent
表中删除
agent id
,则它将自动删除
user
表中该
agent id
引用的数据。

如果您的表在其
一对多关系中依赖于另一个表,则会发生此错误
因此,在
dbcontext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<AgentMaster>()
    .HasOptional(c => c.Users)
    .WithOptionalDependent()
    .WillCascadeOnDelete(true);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.has可选(c=>c.Users)
.WithOptionalDependent()
.WillCascadeOnDelete(真);
}

如何执行此级联删除?通过连接两个表并删除结果?在这篇文章中,你被要求清楚地标记:[link]()你能解释一下如何进行级联删除吗。抱歉,因为我是mvc的新手,没有完全了解如何执行此删除操作您可以显示AgentMaster模型吗?在我的问题中包含模型首先您必须删除所有与AgentMaster相关的用户然后您可以删除AgentMaster抱歉,我没有得到此答案,请您解释一下这一点,或者在模型创建时此覆盖是什么(DbModelBuilder modelBuilder),没有得到那行代码怎么用我的代码更改那部分?你只需要在dbcontext中添加这个,你可以在你给db.AgentMasters看的代码中检查这个@user355。你是如何初始化db的?private A.db=new A();A是你的dbcontext?
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<AgentMaster>()
    .HasOptional(c => c.Users)
    .WithOptionalDependent()
    .WillCascadeOnDelete(true);
}