2015-06-16 104 views
1

我已經通過用戶id從我的用戶表中刪除用戶的方法:刪除錶行它是一個外鍵

public void DeleteUser(int id) 
    { 
     User delObj = (Users.Where(u => u.UserId == id)).Single(); 
     Users.Remove(delObj); 
     SaveChanges(); 
    } 

主鍵的userid也被用來作爲一個外國鍵入UserRoleId(PK),UserId(FK)和RoleId(FK)的userroles表中。我不確定如何用一種方法敲出兩個表中的兩行。

在此先感謝!

這裏有精確的性能:

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 

    public virtual ICollection<UserRole> UserRoles { get; set; } 
} 



public class UserRole 
    { 
     [Key] 
     public int UserRoleId { get; set; } 
     public int UserId { get; set; } 
     public short RoleId { get; set; } 

     public virtual Role Role { get; set; } 
    } 
+0

使用級聯的FK定義刪除? –

+0

讓我知道你正在使用什麼樣的ORM,我會讓你知道確切的解決方案。 –

+0

剛剛編輯,讓我知道如果這是足夠的 – cfly24

回答

1

C#實現你的實體之間的關係。例如,在User對象上創建角色實體的集合。 ORM(我猜你正在使用EntityFramework或NHibernate)會自動去除依賴對象。

class User { 
    public virtual ICollection<UserRole> UserRoles { get; set; } 
} 

它應該映射爲多對多關係。

並在您的DbContext必須添加:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>() 
      .HasMany(u => u.UserRoles) 
      .WithOptional().WillCascadeOnDelete(true); 
     base.OnModelCreating(modelBuilder); 
    } 
+0

我更新,以顯示我目前有什麼。當我刪除一個用戶時似乎沒有進行連接。 – cfly24

+0

它是EntityFramework嗎?如果角色集合正在填充,請檢查您何時在「用戶」上進行獲取? –

+0

是的,它是____ – cfly24