2

我尝试向我的数据库添加一个新值。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;

    }

每次我运行我的代码时,都会在数据库中添加一个新行,尽管具有提供的用户名的用户已经存在于数据库中。

为什么会这样?我的代码的哪一部分是错误的?

4

3 回答 3

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();
    }   
}
于 2013-06-12T02:23:30.270 回答
1

你的逻辑错了。如果给定酒店中有多个用户,您的代码将为所有名称与 UserName 不同的用户添加更多用户。

bool found = false;
foreach(string cek in cekUser)
{
  if ( UserName == cek)
  {
    found = true;
    break;
  }
}
if (!found)
   _UserRepository.Add(user);
于 2013-06-12T02:24:28.583 回答
0

只是提供一个替代的想法。

如果您有权访问数据库,最好的方法是将Username字段设为 UNIQUE。这样,即使您的代码错误,重复插入也会失败。然后你在你的存储库中优雅地捕获失败,鲍勃是你的叔叔。

于 2013-06-12T03:12:00.177 回答