我尝试在数据库中添加一个新值。 UserPassword
和RePassword
必须具有相同的值,并且数据库中不得存在UserName
的用户。
public User NewUser(int HotelID, string UserName, string UserPassword, string RePassword, string FullName, string Email, bool Active, bool MasterUser)
{
User user = new User();
user.HotelID = HotelID;
user.UserName = UserName;
user.UserPassword = UserPassword;
user.FullName = FullName;
user.Email = Email;
user.IsActiveq = Active;
user.IsMaster = MasterUser;
var cekUser = (from c in _UserRepository.All()
where c.HotelID == HotelID
select c.UserName).ToList();
if (UserPassword == RePassword)
{
foreach (string cek in cekUser)
{
var x = cek;
if (UserName != x)
{
_UserRepository.Add(user);
}
}
}
_UserRepository.CommitChanges();
return user;
}
每次运行代码时,都会在数据库中添加一个新行,尽管数据库中已存在具有提供的用户名的用户。
为什么会这样?我的代码中哪一部分错了?
答案 0 :(得分:4)
我认为您的代码应该是这样的:
if (UserPassword == RePassword)
{
// Also I thinks you should finish whether user existed logic in database
// but for now, let's follow your original logic
var existedUsers = (from c in _UserRepository.All()
where c.HotelID == HotelID
select c.UserName).ToList();
if (!existedUsers.Any(u => u == UserName))
{
_UserRepository.Add(user);
_UserRepository.CommitChanges();
}
}
答案 1 :(得分:1)
你的逻辑错了。如果给定酒店中有多个用户,则您的代码将为名称与UserName不同的所有用户添加更多用户。
bool found = false;
foreach(string cek in cekUser)
{
if ( UserName == cek)
{
found = true;
break;
}
}
if (!found)
_UserRepository.Add(user);
答案 2 :(得分:0)
提供另一种想法。
如果您有权访问数据库,最好的方法是使Username
字段为UNIQUE。这样,即使您的代码出错,重复插入也会失败。然后你在你的知识库中捕获优先失败,鲍勃是你的叔叔。