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 に答える