我收到此错误...
Violation of PRIMARY KEY constraint 'PK_Members'. Cannot insert duplicate key in object 'dbo.Members'.
The statement has been terminated.
当我尝试在ASP.NET MVC中使用成员资格和角色提供程序时。从RoleProvider内部调用GetUser方法时会发生这种情况。
var member = System.Web.Security.Membership.GetUser(email) as Models.Member;
//var member = (
// from m in DataContext.Members
// where m.Email == email
// select m).Single();
var role = (
from r in DataContext.Roles
where r.Name == roleName
select r).Single();
member.Groups.Add(new Models.Group(role));
DataContext.SubmitChanges();
答案 0 :(得分:1)
问题出现在代码中
member.Groups.Add(new Models.Group(role));
根据sql返回的错误消息,GetUser之类的Read操作不会抛出此类错误。
答案 1 :(得分:0)
我怀疑是因为你要添加一个已存在的组。
在尝试添加角色之前,您可能需要检查角色是否存在。
希望这有帮助。
答案 2 :(得分:0)
调试此方法的一个好方法是使用SQL事件探查器来确定对数据库运行的SQL代码。
我怀疑您正在尝试将记录保存在数据库中已存在相同主键的位置。
SQL Profiler = http://msdn.microsoft.com/en-us/library/ms181091.aspx
答案 3 :(得分:0)
您确定没有尝试在已存在的PRIMARY KEY字段中输入数字吗?如果是auto_increment,只需输入0,它将生成该字段的值,最后一个数字+ 1
希望这会有所帮助:)
答案 4 :(得分:0)
如果异常是SqlException,您可能会获得重复记录的错误号,即2627.您可能会捕获异常并进行验证,并相应地显示和管理任何错误。我希望这有帮助。
catch (SqlException ex)
{
if (ex.Number == 2627)
{
MessageBox.Show("This record exists: "+ex.Message, "Error");
}
else
{
MessageBox.Show(ex.Message, "Error")
}
}
答案 5 :(得分:0)
我是这方面的新手,但我将尝试一下,如果对您不起作用,对不起。
我认为与其使用,
member.Groups.Add(new Models.Group(role));
您应该使用以下内容(如果要更新数据库):
member.Groups.Entry(new Models.Group(role));
如果以上代码不起作用,请尝试以下操作(如果要添加到数据库中):
// First, search for the particular obj you want to insert
var checkModels = member.Groups.Find(new Models.Groups(roles));
// If the obj doesn't already exist, add it to the database
if(checkModels == null){
member.Groups.Add(new Models.Group(role));
}
// If the obj does exist already, then update it
else{
member.Groups.Entry(new Models.Group(role)).State = EntityState.Modified;
}