2017-03-17 11 views

答えて

0

私はそれを別の方法で行いました。リスト内でuserIdを使ってすべてのレコードを取得した後、RemoveRange()を使用してエラーなく正常に機能しました。

var userRoles = unitOfWork.UserRoles.GetByUserId(userId).ToList(); 
      // Delete user role 
      unitOfWork.UserRoles.RemoveRange(userRoles); 

      // Perform changes 
      unitOfWork.SaveChanges(); 
0

なぜだけではなく、

unitOfWork.UserRoles.RemoveRange(unitOfWork.UserRoles.where(r=>r.UserId==userId)); 

新しいのUserRoleのオブジェクトだけで作成されているので、あなたは、エラーを取得し、あなたのdbcontextからそれらを取得できませんでした。したがって、dbcontextに何らかの形でリンクする必要があります。アタッチ機能はこのためです。

  foreach (RoleDto role in userRoles) 
     { 
      var UserRole = new UserRole(); 
      UserRole.RoleId = role.Id; 
      UserRole.UserId = userId; 
      usersAllRoles.Add(UserRole); 
      unitOfWork.UserRoles.Attach(UserRole); 
     } 
     // Delete user role 
     unitOfWork.UserRoles.RemoveRange(usersAllRoles); 
+0

UserRolesはリポジトリであり、Whereメソッドはありません。 – Dipak

0

を呼び出して試してみてくださいそれは(それが同じコンテキストによってロードされていなかった)エンティティが接続されていないことを意味します。 試してみてください:

foreach (RoleDto role in userRoles) 
      { 
       var UserRole = new UserRole(); 
       UserRole.RoleId = role.Id; 
       UserRole.UserId = userId; 
       unitOfWork.UserRoles.Attach(UserRole); 
       unitOfWork.Entry(UserRole).State = EntityState.Deleted; 
      } 
      unitOfWork.SaveChanges(); 
関連する問題