ASP. NET MVC 5 Ошибка регистрации бросков. 0 связанных найдено. 1 ожидается - PullRequest
0 голосов
/ 17 апреля 2020

Мне удалось создать класс 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);
    }
}

Моя программа не работает в строке, помеченной как "~".

...