MVC 5中Microsoft.AspNet.Identity的脚手架

本文关键字:Identity 脚手架 AspNet Microsoft MVC | 更新日期: 2023-09-27 18:25:32

我正试图使用Scaffolding和Microsoft.AspNet.Identity创建一个新的控制器,但我遇到了一个错误,说"IdentityUserLogin" has no key defined.

我正在尝试创建Clients表和Microsoft.AspNet.Identity用户表之间的关系。

我用来建立关系的字段是UserCreatedUserModifiedUserAssigned

型号为:

[Table("Clients")]
public partial class Client
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Display(Name = "Criado em")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-M-yyyy HH:mm}")]
    public DateTime DateCreated { get; set; }
    [Display(Name = "Alterado em")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-M-yyyy HH:mm}")]
    public DateTime DateModified { get; set; }
    [MaxLength(128)]
    public virtual string UserCreated_Id { get; set; }
    [ForeignKey("UserCreated_Id")]
    public virtual ApplicationUser UserCreated { get; set; }
    [MaxLength(128)]
    public virtual string UserModified_Id { get; set; }
    [ForeignKey("UserModified_Id")]
    public virtual ApplicationUser UserModified { get; set; }
    [MaxLength(128)]
    public virtual string UserAssigned_Id { get; set; }
    [ForeignKey("UserAssigned_Id")]
    public virtual ApplicationUser UserAssigned { get; set; }
    [Required]
    [MaxLength(256)]
    [Display(Name = "Nome")]
    public string Name { get; set; }
    [Display(Name = "Morada")]
    [MaxLength(512)]
    public string Address { get; set; }
    public int PostalCode { get; set; }
    public int PostalCodeExtension { get; set; }
    [MaxLength(256)]
    public string PostalCodeCity { get; set; }
    [Display(Name = "Telefone")]
    [MaxLength(50)]
    public string Telephone { get; set; }
    [Display(Name = "Fax")]
    [MaxLength(50)]
    public string Fax { get; set; }
    [Display(Name = "Email")]
    [MaxLength(256)]
    public string Email { get; set; }
    [Display(Name = "Contribuinte")]
    [MaxLength(50)]
    public string VAT { get; set; }
}

MVC 5中Microsoft.AspNet.Identity的脚手架

可能是因为ApplicationUser就是这样定义的。我使用以下实现,它运行得很完美-

public class ApplicationUserLogin : IdentityUserLogin<int>
{
}
public class ApplicationUserRole : IdentityUserRole<int>
{
}
public class ApplicationUserClaim : IdentityUserClaim<int>
{
}
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
}

然后像这样使用

public class DomainEntity : .....
{
    [Key]
    public virtual int Id { get; set; }
    public virtual ApplicationUser CreatedBy { get; set; }
    public virtual ApplicationUser LastUpdatedBy { get; set; }
}

EDIT:用户管理器需要第二个参数,即密钥类型。所以把它改成这个

 UserManager<ApplicationUser, int>

以及其他-

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>