2017-12-06 10 views
0

私は、コンピュータとユーザーとの関係が多岐にわたっています。残念ながら、多対多の関係にCRUD操作の例はあまりありません。最も重要な追加と削除。私はcomputer.ComputerUser.Add()のようにしようとしましたが、それは動作しますが、削除は私のために混乱しています。私はそれを正しくやっているかどうかわからない。あなたの洞察は助けになります。ありがとうございますエンティティフレームワークのコア2.0のコードを使用して、多対多の関係でCRUD操作を行う

// a computer can have one or more Users registered to access 
public class Computer 
{ 

    [Key] 
    public Guid ComputerId { get; set; } 
    public string MachineName { get; set; } 
    public DateTime Updated { get; set; }  
    public bool IsActive { get; set; } = true;   
    public virtual ICollection<ComputerUser> ComputerUser { get; set; } 

    public Computer() 
    { 
     this.ComputerUser = new HashSet<ComputerUser>(); 
    } 
} 
// an user can have access to one or more computers 
public class User 
{ 
    [Key] 
    public Guid GatekeeperUserId { get; set; } 
    public string Name { get; set; }  
    public virtual ICollection<ComputerUser> ComputerUser { get; set; } 

    public GatekeeperUser() 
    { 
     this.ComputerUser= new HashSet<ComputerUser>(); 
    } 
} 

// Joining table 
    [Key] 
    public Guid ComputerId { get; set; } 
    public Computer Computer { get; set; } 
    [Key] 
    public Guid UserId { get; set; } 
    public User User { get; set; } 

答えて

1

おそらく、多対多の関係から削除するコンピュータまたはユーザーのIDがあります。 あなたは呼び出すことができます。

private DeleteComputerUser(User user, Guid computerId) 
{ 
    var computerUser = _dbContext.ComputerUser.SingleOrDefault(computerUser=> 
     computerUser.UserId == user.GatekeeperUserId 
     && computerUser.ComputerId == computerId); 
    if (computerUser != null) 
    { 
     _dbContext.ComputerUser.Remove(computerUser); 
     _dbContext.SaveChanges(); 
    } 
} 

は今、特定のIDを持つユーザーとコンピュータとの間の関係がなくなっています。

+0

ああ、ComputerUserをDbSetに追加する必要がありますか?私はナビゲーションを介して行うことはできません – Raj

+0

はい、このテーブルはDbSetにもあるはずです – MateuszWkDev

+0

私はComputerUserブリッジテーブルを2つのテーブルに分割してそれぞれに多くの情報を格納する方法はありますか?ありがとうございました – Raj

2

何が混乱していますか?他のエンティティと同じように機能します:

user.ComputerUser.Remove(computerUser); 

私はあなたがM2Mでハングアップしていると思います。実際、これは本当に真のM2Mではありません。あなたはUserからComputerUserまで1対多を、ComputerからComputerUserまでは1対多を持っています。その結果、他のコレクションから他のエンティティを削除するように動作します。

+0

クリスに感謝します。メソッドを削除する前に、どのようにしてcomputerUserを取得できますか? – Raj

関連する問題