将公司模型添加到科目类

本文关键字:添加 公司 模型 | 更新日期: 2023-09-27 17:49:17

我目前正在尝试在帐户模型类中添加一个额外的模型,如下所示

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
    public int companyID { get; set; }
    public virtual CompanyDetails company { get; set; }
}
public class CompanyDetails
{
    [Key]
    public int companyID { get; set; }
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 1)]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
}

我不确定的是,如何创建具有公司类的DBSet,并且公司的ID列会显示在用户表中吗?

将公司模型添加到科目类

MVC 5 利用 Identity,其中默认带有 ApplicationUser 类。这是应用程序的"用户",也是实体框架保存到数据库中的内容。因此,您需要在此处添加其他关系,而不是RegisterViewModel ,顾名思义,它是视图模型,而不是实体。

身份模型.cs

public class ApplicationUser : IdentityUser
{
    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 virtual CompanyDetails Company { get; set; }
}

生成迁移并更新数据库后,将创建dbo.CompanyDetails表,并将该表的外键添加到dbo.AspNetUsers(用于ApplicationUser的表(

当然,您需要将属性保留在RegisterViewModel上,以便使用该视图模型实际编辑这些字段,但您可以删除 virtual 关键字。virtual 关键字表示可以重写属性或方法,这对于实体上的导航属性是必需的,以便实体框架可以在它创建的代理类上附加延迟加载逻辑。这可能比您需要的信息更多,但无论长短,您的视图模型都不需要它。