0

我有兩個類:去除許多一對多的關係

public class User 
{ 
    public int Id {get;set;} 
    public string Username {get;set;} 

    [InverseProperty("Users")] 
    public virtual ICollection<Tag> Tags {get;set;} 
} 

public class Tag 
{ 
    public int Id {get;set;} 
    public string Title {get;set;} 

    [InverseProperty("Tags")] 
    public virtual ICollection<User> Users {get;set;} 
} 

這顯然導致3臺類似於許多一對多的關係稱爲UserTags,只有兩個欄,用戶標識和標籤識別。

現在假定我有100.000個用戶和100.000個標籤,平均每個Eser與1.000標籤有關係。我想從特定的User.Tags集合中移除單個標籤,而不必在此之前加載所有標籤。

什麼是最快的方法呢?

回答

6

試試這個:

// Create dummy objects for existing user and tag 
var user = new User { Id = existingUserId }; 
var tag = new Tag { Id = existingTagId }; 
user.Tags.Add(tag); 

// Start tracking user and related tag as unchanged 
dbContext.Users.Attach(user); 
// Remove relation between user and tag 
user.Tags.Remove(tag); 
dbContext.SaveChanges(); 
+0

謝謝拉吉斯拉夫。實際上,我基於存根實體構建了一個完整的「框架」,這是因爲幾乎相同的原因,即刪除實體而不加載它。不過,我想知道EF5是否帶來了一些新功能,可以在不使用實體狀態的情況下實現這一功能...... –

+0

據我所知,它沒有。 –