Наследование от ApplicationUser возвращает ноль - PullRequest
0 голосов
/ 01 марта 2019

Я не уверен, если это проблема с моими моделями классов или RegisterIvestor.cs. Ни одно из моих свойств Investor.cs не сохранено и не возвращает нулевые значения.

Я пытаюсь создать разные логины для разных типов пользователей.Я хочу, чтобы все пользователи сохранили в ApplicationUser.Я обнаружил, что приведенный ниже код создает и переносит данные, получая только нулевые данные.

ApplicationDBContext.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>,
ApplicationUserRole, IdentityUserLogin<string>,
IdentityRoleClaim<string>, IdentityUserToken<string>>

{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
       : base(options)
    {
    }


    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<ApplicationUser>()
          .HasOne(p => p.Investor)
          .WithOne(b => b.ApplicationUser)
          .HasForeignKey<Investor>(b => b.InvestorForeignKeyID);

    }
    public DbSet<ApplicationUser> ApplicationUser { get; set; }
    public DbSet<Investor> Investor { get; set; }
}

RegisterInvestor.cshtml.cs

        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser()
            {
                UserName = Input.Email,
                Email = Input.Email,
                FirstName = Input.FirstName,
                LastName = Input.LastName,
                Address = Input.Address,
                City = Input.City,
                State = Input.State,
                Zip = Input.Zip

                Investor = new Investor()
                {
                        SsnTaxId = Input.SsnTaxId,
                        DOB = Input.DOB,
                        DriverClass = Input.DriverClass,
                        LicenseNumber = Input.LicenseNumber                      
                }

            };
        }
        }

ApplicationUser.cs

 public class ApplicationUser : IdentityUser
{
    public virtual Investor  Investor { get; set; }
    //other properties
 }

Investor.cs

 public class Investor : ApplicationUser
{

    [Required]
    [Display(Name = "SSN or TaxID")]
    public string SsnTaxId { get; set; }
    [Display(Name = "Date of Birth")]
    public DateTime DOB { get; set; }


    public string InvestorForeignKeyID { get; set; }

    [ForeignKey("InvestorForeignKeyID")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}

отображение данных

@Html.DisplayFor(m => Model.FirstName)
@Html.DisplayFor(m => m.Investor.SsnTaxId)

1 Ответ

0 голосов
/ 02 марта 2019

Прежде всего, вы не должны создавать экземпляр чего-либо с тем же именем класса, это сбивает с толку и является плохой практикой:

public virtual Investor UserInvestor { get; set; }

Что касается значения Invertor, равного нулю, если вы используете цикл в представленииесть вероятность, что, поскольку вы создаете экземпляр объекта внутри ApplicationUser, тогда все они имеют значение null, попробуйте что-то вроде этого:

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
   {

        UserInvestor = new Investor();
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser()
            {
                UserName = Input.Email,
                Email = Input.Email,
                FirstName = Input.FirstName,
                LastName = Input.LastName,
                Address = Input.Address,
                City = Input.City,
                State = Input.State,
                Zip = Input.Zip

                UserInvestor.SsnTaxId = Input.SsnTaxId,
                UserInvestor.DOB = Input.DOB,
                UserInvestor.DriverClass = Input.DriverClass,
                UserInvestor.LicenseNumber = Input.LicenseNumber                      
                }

            };
        }
   }

Также для отображения FirstName в представлении сделайте это следующим образом:

@Model.FirstName

или

@Html.DisplayFor(m => m.FirstName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...