2017-04-23 137 views
1

我做的一個項目,在我用兩個表代理和用戶如何刪除行。用戶表包含一個名爲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

回答

0

這個錯誤時,你的表是依賴於另一個表中的情況下,其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

0

你沒有任何活動的asp.net,但可以啓用在DBMS兩條表之間的關係層疊選項。

+0

我該怎麼做這個級聯刪除?通過加入兩個表並刪除結果? – user355

+0

你會在這個帖子中被問清楚標記:[鏈接](http:// stackoverflow。com/questions/43573410/how-to-delete-rows-of-two-different-table-having-same-id-mvc/43573495#answer-43573945) –

0

您不能直接刪除是由與外鍵的另一個表引用一個表的記錄。

您必須顯式刪除用戶表的相關行也可以使用ON DELETE CASCADE自動刪除用戶表的行。

+0

你能解釋一下如何做這個級聯刪除。對不起,因爲我是新來的mvc,並沒有完全得到如何做到這一點刪除操作 – user355

1

如果您正在使用的數據庫的SQL Server,那麼只需打開你的SQL管理Studio和開放的關係窗戶上已定義的外鍵關係的列。有一個選項插入和更新規範,展開它併爲刪除規則,選擇級聯選項。

enter image description here

對於您的情況,做出這些改變,如果你刪除agent idagent表,然後它會自動在你的user表中刪除該agent id引用的數據之後。

相關問題