Создайте пользователя со схемой aspnet и UserRepository/ EF ASPNET MVC 4
У меня есть вопрос для создания пользователя в моем BD. Я использую userRepository для создания пользователя в схеме aspnet.
Поэтому для создания пользователя я должен создать одну строку в таблице aspnet_user и aspnet_membership
userId - это ключ идентификации, так что это мой 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 ... Здесь у меня есть уникальное имя пользователя, но если это не так, я не знаю, как я это сделаю сделанный...
Кто-то может мне помочь? спасибо за вашу помощь
1 ответ
Вы должны добавить нового участника через структуру членства. После этого получите 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");
}