自定义RoleProvider:无法在UsersInRole表中插入记录

时间:2009-05-16 08:00:54

标签: asp.net linq-to-sql exception roleprovider

我已经实现了基于LINQ to SQL的RoleProvider,当我在调用AddUsersToRoles方法时抛出异常时向用户分配角色。我已经定义了一个复合主键userid&在这个表上roleId,它仍然抛出这个异常:

  

无法执行创建,更新或删除   'Table(UsersInRole)'上的操作   因为它没有主键。

我的AddUsersToRoles方法的LinQ to SQL实现如下。它在db.UsersInRoles.InsertOnSubmit(userInRole);

处中断
using (RussarmsDataContext db = new RussarmsDataContext())
{
  List<UsersInRole> usersInRole = new List<UsersInRole>();
  foreach (string username in usernames)
  {
    foreach (string rolename in rolenames)
    {
      UsersInRole userInRole = new UsersInRole();
      object userId = ProvidersUtility.GetUserIdByUserName(username,applicationName);
      object roleId = ProvidersUtility.GetRoleIdByRoleName(rolename,applicationName);
      if (userId != null && roleId != null)
      {
        userInRole.UserId = (Guid)userId;
        userInRole.RoleId = (Guid)roleId;
        db.UsersInRoles.InsertOnSubmit(userInRole);
      }
    }
  }
  try
  {
    //  db.UsersInRoles.InsertAllOnSubmit(usersInRole);
    db.SubmitChanges();
  }
  catch (ChangeConflictException)
  {
    db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
    db.SubmitChanges();
  }
}

任何帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:0)

LINQ to SQL本身不支持多对多...连接表必须有两个外键列PLUS 1主键列具有IDENTITY属性。