具有相同的ID MVC两个不同的表

问题描述:

我做的一个项目,在我用两个表代理和用户如何删除行。用户表包含一个名为agentid的外键,它从代理表的id中获取值。所以在这里我需要删除代理表中的代理,同时它必须对用户表生效,并且必须删除用户表中具有与删除的代理相同标识的行。例如,假设如果我从代理表中删除了代理10,则必须删除ID 10中的所有细节,同时还必须删除用户表中具有10的agentid。当我只需删除代理表的代理,它会生成具有相同的ID MVC两个不同的表

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

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

这是我的控制器部分,当我试图加入表和删除记录它总是显示了同样的错误。任何人都可以请帮我找到解决我的问题?????

+0

添加这个您能不能告诉AgentMaster模型发生? – Usman

+0

已在我的问题中包含模型 – user355

+0

首先你必须删除所有用户与agerntmaster相关的东西,然后你可以删除代理人 – Usman

这个错误时,你的表是依赖于另一个表中的情况下,其one to many关系 所以你dbcontext

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

对不起,我没有得到这个答案,你可以请解释这个或什么是这个重写OnModelCreating(DbModelBuilder modelBuilder),没有得到那个linehow我可以用我的代码更改那部分吗? – user355

+0

你只需要在dbcontext中添加这个,你可以检查这个[DbContext.OnModelCreating方法](https://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext.onmodelcreating(v = vs .113).aspx) – Usman

+0

@ user355你显示的代码db.AgentMasters你如何初始化数据库? – Usman

你没有任何活动的asp.net,但可以启用在DBMS两条表之间的关系层叠选项。

+0

我该怎么做这个级联删除?通过加入两个表并删除结果? – user355

+0

你会在这个帖子中被问清楚标记:[链接](http:// *。com/questions/43573410/how-to-delete-rows-of-two-different-table-having-same-id-mvc/43573495#answer-43573945) –

您不能直接删除是由与外键的另一个表引用一个表的记录。

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

+0

你能解释一下如何做这个级联删除。对不起,因为我是新来的mvc,并没有完全得到如何做到这一点删除操作 – user355

如果您正在使用的数据库的SQL Server,那么只需打开你的SQL管理Studio和开放的关系窗户上已定义的外键关系的列。有一个选项插入和更新规范,展开它并为删除规则,选择级联选项。

enter image description here

对于您的情况,做出这些改变,如果你删除agent idagent表,然后它会自动在你的user表中删除该agent id引用的数据之后。