Asp.net 自定义角色提供者:Can';t在UsersInRole表中插入记录
我已经实现了一个基于LINQ到SQL的Asp.net 自定义角色提供者:Can';t在UsersInRole表中插入记录,asp.net,linq-to-sql,exception,roleprovider,Asp.net,Linq To Sql,Exception,Roleprovider,我已经实现了一个基于LINQ到SQL的RoleProvider,当我在调用AddUsersToRoles方法时抛出异常并将角色分配给用户时。我在此表上定义了一个复合主键userid&roleId,它仍然引发此异常: 无法执行创建、更新或删除 对“表(UsersInRole)”的操作 因为它没有主键 我的AddUsersToRoles方法的LinQ到SQL实现如下所示。它在db.UsersInRoles.InsertOnSubmit(userInRole)处中断 使用(RussarmsDataCo
RoleProvider
,当我在调用AddUsersToRoles
方法时抛出异常并将角色分配给用户时。我在此表上定义了一个复合主键userid
&roleId
,它仍然引发此异常:
无法执行创建、更新或删除
对“表(UsersInRole)”的操作
因为它没有主键
我的AddUsersToRoles
方法的LinQ到SQL实现如下所示。它在db.UsersInRoles.InsertOnSubmit(userInRole)处中断代码>
使用(RussarmsDataContext db=new RussarmsDataContext())
{
List usersInRole=new List();
foreach(用户名中的字符串用户名)
{
foreach(rolenames中的字符串rolename)
{
UsersInRole userInRole=new UsersInRole();
object userId=ProviderSutibility.GetUserIdByUserName(用户名、应用程序名);
对象roleId=ProviderSutibility.GetRoleIdByRoleName(rolename,applicationName);
if(userId!=null&&roleId!=null)
{
userInRole.UserId=(Guid)UserId;
userInRole.RoleId=(Guid)RoleId;
db.UsersInRoles.InsertOnSubmit(userInRole);
}
}
}
尝试
{
//db.UsersInRoles.InsertAllOnSubmit(usersInRole);
db.SubmitChanges();
}
捕获(ChangeConflictException)
{
db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
db.SubmitChanges();
}
}
任何帮助都将不胜感激。
谢谢。LINQ to SQL本机不支持多对多。。。联接表必须有两个外键列和一个带有IDENTITY
属性的主键列
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();
}
}