我正在做一个项目,在那里我有两个表代理和用户。 user表包含一个名为agentid的外键,它从代理表的id中获取值。所以这里我需要删除代理表中的代理,同时它必须对用户表产生影响,并且必须删除用户表中具有与已删除代理相同ID的行。例如,假设如果我从代理表中删除了代理10,则必须删除id 10中的所有细节,同时还必须删除用户表中的10的agentid。当我只是删除代理表中的代理时,它会生成错误
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 :(得分:2)
如果您使用的是SQL Server for Database,则只需打开SQL Management Studio并打开已定义外键关系的列的关系窗口。有一个选项插入和更新规范,展开它,对于删除规则,选择 Cascade 选项。
对于您的方案,在进行这些更改后,如果从agent id
表中删除agent
,则会自动删除agent id
表中此user
引用的数据。
答案 1 :(得分:0)
您在asp.net上没有任何活动,但您可以在dbms中的两个表之间的关系上启用Cascade选项。
答案 2 :(得分:0)
您不能直接删除另一个使用外键表引用的表的记录。
您必须显式删除users表的相关行,或者您可以使用ON DELETE CASCADE自动删除users表的行。
答案 3 :(得分:0)
当您的表依赖于您的one to many
关系中的另一个表时,会发生此错误
所以在dbcontext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AgentMaster>()
.HasOptional(c => c.Users)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
}