Мне удалось создать класс PersonalInfo
, который ссылается на предварительно созданную таблицу aspnetusers.
Использование этих команд:
namespace Project.Models
{
public class PersonalInfo
{
[Key]
public virtual Guid UserID { get; set; }
public string FirstName { get; set; }
// other fields...
public virtual ApplicationUser User { get; set; }
}
}
и
public class ApplicationUser : IdentityUser
{
public PersonalInfo PersonalInfo { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection2", throwIfV1Schema: false)
{
}
public DbSet<PersonalInfo> PersonalInfo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PersonalInfo>()
.HasRequired(m => m.User)
.WithRequiredDependent(u => u.PersonalInfo);
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Я использую предварительно созданный файл views / account / register.cs html, но я получаю это ошибка:
Объекты в ApplicationDbContext.Users участвуют в отношении PersonalInfo_User. 0 связанных "PersonalInfo_User_Source" были найдены. 1 Ожидается «PersonalInfo_User_Source».
Я понимаю, что это говорит мне, мне нужно заполнить таблицу PersonalInfo
одновременно с регистрацией в таблице aspnetusers. Но я не знаю, как этого добиться. Тем более, что я хочу отправить данные в две разные таблицы одновременно. Также я никогда не устанавливал поля personalInfo для заполнения. Я просто предполагал, что программа автоматически создаст мне идентификатор Guid personalinfo, когда я попытаюсь зарегистрироваться?
Любая помощь будет признательна.
С уважением!
Редактировать: Вот мой контроллер регистров:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
~ var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
// string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
// var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
// await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
}
Моя программа не работает в строке, помеченной как "~".