我有一个表,其中有一个名为ID_client的属性,其中是主键。我必须从此属性中搜索最大值并执行+1以分配给新客户端。我有以下代码..
public int IDuser()
{
MembershipUserCollection iduser = Membership.GetAllUsers();
foreach (MembershipUser member in iduser)
{
UserEntity entity = new UserEntity();
entity.Username = member.UserName;
entity.Roles = "Users";
entity.Email = member.Email;
for (int i = 1; i <=iduser.Count; i++)
{
entity.ID_client = i;
}
_entities.Add(entity);
}
int maxID = _entities.Max(x => x.ID_client) +1;
return maxID;
}
如果我创建,例如,四个用户都可以,1,2,3和4.但如果我删除第三个用户,我有1,2和4作为ID_client,和下一个新用户,我想赋值5,但是这个函数返回4,而不是5.就像函数做一个count + 1而不是最大值+1。
有人可以帮助我吗?
感谢。
答案 0 :(得分:3)
您的代码会重置所有实体上的ID_client。因此,如果删除一个用户,剩下的用户将ID_client设置为1,2,3或4.因此List.Max()正确返回4
答案 1 :(得分:2)
您为方法指定的名称并不反映该方法应该执行的操作。给它说一个名字。我没有看到内循环应该做什么。算了吧。在添加新记录之前获取最大ID。也许你想要这样的东西
public int CopyMembershipUsersToUserEntities()
{
int lastID = _entities.Max(x => x.ID_client);
foreach (MembershipUser member in Membership.GetAllUsers())
{
UserEntity entity = new UserEntity();
entity.Username = member.UserName;
entity.Roles = "Users";
entity.Email = member.Email;
entity.ID_client = ++lastID;
_entities.Add(entity);
}
return lastID;
}
正如其他人已经说过的那样,您也可以使用自动增量列。这在多用户环境中更安全。
答案 2 :(得分:1)
在数据库级别启用字段“ID”的自动递增 - 所有代码都将是多余的。
答案 3 :(得分:0)
很奇怪,但我已经解决了我的错误......
在存储membershipUsser之前,我将其存储在列表中..
uentity.Username = username;
for(int i=1;i<1000;i++)
{
uentity.ID_client = i;
}
_entities.Add(uentity);
然后创建一个MembershipUser ..
userDataSource.Insert(new UserEntity(
GetPartitionKeyFromUsername(username).ToString(),
String.Empty)
{
Username = username,
Password = EncodePassword(password),
CreationDate = DateTime.Now,
IsDeleted = DefaultValues.IsDeleted,
IsLockedOut = DefaultValues.IsLockedOut,
IsApproved = DefaultValues.IsApproved,
ApplicationName = applicationName,
Email = email,
PasswordQuestion = passwordQuestion,
PasswordAnswer = passwordAnswer,
Gender = DefaultValues.Gender,
LastProfileUpdatedDate = DateTime.Now,
LastActivityDate = DateTime.Now,
LastPasswordChangedDate = DateTime.Now,
LastLoginDate = new DateTime(1970, 1, 1),
LastLockedOutDate = new DateTime(1970, 1, 1),
FailedPasswordAttemptWindowStart = new DateTime(1970, 1, 1),
FailedPasswordAnswerAttemptWindowStart = new DateTime(1970, 1, 1),
Birthday = new DateTime(1970, 1, 1),
Roles = Roles(username),
ID_client = IDuser(username)
});
并且总是给我一个自动增量ID的方法,因为如果我删除一个成员用户,我不会从列表中删除..
public int IDuser(string username)
{
int lastID;
if (username=="Admin")
{
lastID=1;
}
else
{
lastID = _entities.Count();
}
return lastID;
}
但我有答案,我用
lastID = _entities.Count();
而不是
lastID = _entities.Max(x => x.ID_client)
因为第二个用户的_entities.Max给了我999,而不是数字2.它是给我剩余容量,而不是ID_client(2)的最大值。
有人可以告诉我为什么会这样?
感谢。