我正在尝试将Asp.Net MVC框架与微软提供的内置身份系统结合使用。
但是,我需要捕获有关用户的更多数据。
为了最大限度地减少对Identity类的更改,我需要创建一个名为" User"我放入所有自定义属性的地方。然后我添加了一个名为" SystemId"的属性。这是ApplicationUser
模型的外键。
这就是我所做的
这是我的自定义User
型号
[Required]
[MaxLength(128)]
[ForeignKey("Id")]
public string SystemId { get; set; }
[MaxLength(50)]
public string FirstName { get; set; }
[MaxLength(50)]
public string MiddleName { get; set; }
[MaxLength(50)]
public string LastName { get; set; }
[MaxLength(250)]
public string Email { get; set; }
[MaxLength(50)]
[Index("IX_Username", 1, IsUnique = true)]
public string Username { get; set; }
[ForeignKey("Role")]
public int RoleId { get; set; }
[ForeignKey("Client")]
public int CurrentClientId { get; set; }
[ForeignKey("Campaign")]
public int? CurrentCampaignId { get; set; }
public string Status { get; set; }
public virtual Role Role { get; set; }
public virtual Client Client { get; set; }
public virtual Campaign Campaign { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public virtual List<UserToPrivilege> UserToPrivileges { get; set; }
public User()
{
DateTime UtcNow = DateTime.UtcNow;
Status = "active";
MiddleName = null;
UserToPrivileges = new List<UserToPrivilege>();
CreatedAt = UtcNow;
LastUpdatedAt = UtcNow;
}
}
然后在IdentityModel
课程中,我将ApplicationUser
课程改为以下
public class ApplicationUser : IdentityUser
{
[ForeignKey("User")]
public int UserId { get; set; }
public virtual User User { get; set; }
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;
}
}
但是当我尝试创建我的迁移时
Add-Migration InitialCreate -Force
我收到以下错误
该物业&#39; Id&#39;无法配置为导航属性。该 property必须是有效的实体类型,属性应该是 非抽象的吸气剂和二传手。对于集合属性的类型 必须实现ICollection,其中T是有效的实体类型。
我做错了什么?如何将自定义User
模型链接到属于关系的ApplicationUser
模型?
答案 0 :(得分:0)
首先更改班级名称。然后尝试将public virtual ApplicationUser
添加到您的新课程中希望这有效,因为对我有用。
我使用了新的类UserProfile
,它看起来像这样:
[Table("UserProfiles")]
public class UserProfile
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public virtual ApplicationUser User { get; set; }
public string UserId { get; set; }
public DateTime CreatedAt { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Gender { get; set; }
public string UrlSeo { get; set; }
}
对我来说很好。