Asp.net mvc 如何删除具有相同id的两个不同表的行mvc
我正在做一个项目,其中我有两个表代理和用户。用户表包含一个名为agentid的外键,该外键从代理表的id中获取值。因此,这里我需要删除代理表中的一个代理,同时它必须对用户表生效,并且必须删除用户表中具有已删除代理的相同id的行。例如,假设我从代理表中删除了代理10,则id 10中的所有详细信息都必须删除,同时用户表中带有10的代理也必须删除。当我简单地删除代理表中的代理时,它会生成一个错误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
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);
}