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用户表之间的关系。
我用来建立关系的字段是UserCreated
、UserModified
和UserAssigned
。
型号为:
[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; }
}
可能是因为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>