1

我有一個在我的bd中創建用戶的問題。 我使用userRepository在aspnet模式中創建用戶。使用aspnet模式和UserRepository/EF創建一個用戶ASPNET MVC 4

所以創建一個用戶,我必須aspnet_user和aspnet_membership表中創建一個行

的用戶標識的身份密鑰,因此它是我的BDD誰管理這個...所以現在,我在這個代碼我UserRepository類:

public aspnet_User CreateUser(string username, string password, string email) 
    { 
     using (WebsiteEntities db = new WebsiteEntities()) 
     { 
      aspnet_User user = new aspnet_User(); 

      user.UserName = username; 
      user.Email = email; 

      db.aspnet_User.Add(user); 
      db.SaveChanges(); 

      **User u = GetUser(username);** 

      Aspnet_Membership member = new Aspnet_Membership(); 

      member.UserId = u.UserId; 
      member.PasswordSalt = CreateSalt(); 
      member.Password = CreatePasswordHash(password, user.PasswordSalt); 
      member.CreateDate = DateTime.Now; 
      member.IsApproved = false; 
      member.IsLockedOut = false; 
      member.LastLockoutDate = DateTime.Now; 
      member.LastLoginDate = DateTime.Now; 

      db.aspnet_Membership.Add(member); 
      db.SaveChanges(); 

      return u; 
     } 
    } 

但是,我不認爲這是與aspnet_User和aspnet_Membership之間的外鍵創建用戶的好辦法...在這裏,我有一個用戶名誰是獨一無二的,但如果它WASN我不知道我會怎麼做...

有人可以幫助我嗎?感謝您的幫助

回答

0

您應該通過成員身份框架添加新成員。之後完成獲取UserId用作外鍵。

這是我做的,它可能不是很理想,但它爲我工作:

var createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); 

    if (createStatus == System.Web.Security.MembershipCreateStatus.Success) 
    { 
    var newUser = new User(); 

    newUser.DisplayName = model.DisplayName; 
    newUser.Email = model.Email; 
    newUser.UserUnits.Add(new UserUnit { UnitId = model.UnitId, Status = (int)UserUnitStatus.Request }); 

    using(var db = new Entities()) 
    { 

    var temp = db.aspnet_Membership.Single(a => a.LoweredEmail == newUser.Email.ToLower()); 

    newUser.GUID = temp.UserId; 

    db.Users.AddObject(newUser); 

    try 
    { 
     db.SubmitChanges() 
    } 
    catch 
    { 
     MembershipService.DeleteUser(model.UserName); 
     throw; 
    } 

    return RedirectToAction("Welcome"); 
    }