2015-12-04 47 views
1

我试图用脚手架和Microsoft.AspNet.Identity创建一个新的控制器,但我得到一个错误,指出 "IdentityUserLogin" has no key defined.脚手架与Microsoft.AspNet.Identity在MVC 5

我试图创建一个客户表和Microsoft.AspNet.Identity用户表之间的关系。

我用来建立关系的字段是UserCreated,UserModifiedUserAssigned

的模型是:

[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; } 
} 

回答

1

可能是因为它是你如何定义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; } 

} 

编辑:用户管理需要第二个参数,密钥类型。所以,改变它像 - 这

UserManager<ApplicationUser, int> 

和其他人 -

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

感谢您好,我使用MVC 5模板和我没有访问用户登陆定义 – Patrick

+1

然后就不理它,添加只需要一个。 'IdentityUser'有多个实现。 –

+0

我得到了一行:public async Task GenerateUserIdentityAsync(UserManager manager)在“manager”下加下划线 – Patrick