添加到数据库的重复用户

时间:2013-06-12 02:03:58

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我尝试在数据库中添加一个新值。 UserPasswordRePassword必须具有相同的值,并且数据库中不得存在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;

    }

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

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

3 个答案:

答案 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。这样,即使您的代码出错,重复插入也会失败。然后你在你的知识库中捕获优先失败,鲍勃是你的叔叔。