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"); 
    }