【问题标题】:Inheriting from ApplicationUser returns null从 ApplicationUser 继承返回 null
【发布时间】:2019-03-01 20:01:06
【问题描述】:

我不确定我的类模型或 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)

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc


    【解决方案1】:

    首先,您不应该实例化具有相同名称的类的东西,这是令人困惑和不好的做法:

    public virtual Investor UserInvestor { get; set; }
    

    至于 Invertor 为空,如果您在视图中使用循环,则有可能因为您在 ApplicationUser 中实例化对象,然后它们都为空,请尝试以下操作:

    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)
    

    【讨论】:

    • 是的,我收到一个错误 UserInvestor 在当前上下文中不存在,我试图将投资者属性包含在 applicationuser 中
    • 这是正确的,我相信您必须在类级别的方法之外执行此操作。
    • 只需将其放在“UserInvestor = new Investor();”之外方法。
    • 显示错误,我需要使用'var UserInvestor = new Investor();'但我需要将值分配给“用户”而不是 UserInvestor
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多