我首先使用代码创建一个外键YogaSpace
,将ApplicationUsers
id 链接到ApplicationUserRefId
类中YogaSpace
。因此,每次我创建并插入一个新YogaSpace
的时,它都会用登录人的 id 填充ApplicationUser
id。我希望它是一对多的,其中一个id的YogaSpace
对象可以是多个。ApplicationUser
但我遇到了关键错误。
public class YogaSpace
{
// for a one-to-one relationship
// great tutorial on code-first
//http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
[Index (IsUnique = true)]
[Key]
[Column(Order = 1)]
public int YogaSpaceId { get; set; }
[Key]
[Column(Order = 2)]
public int ApplicationUserRefId { get; set; }
[ForeignKey("ApplicationUserRefId")]
public virtual ApplicationUser ApplicationUser { get; set; }
[Required]
public string Name { get; set; }
}
这是我的ApplicationUser
课
public class ApplicationUser : IdentityUser
{
//other members left out to save space
public virtual ICollection<YogaSpace> YogaSpaces { 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;
}
}
以下是所有错误。更新数据库时,它会抛出与键相关的问题。
在模型生成期间检测到一个或多个验证错误:
GiftExchange.DataLayer.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' >没有定义键。定义此 EntityType 的键。GiftExchange.DataLayer.Models.IdentityUserRole: : EntityType 'IdentityUserRole' >没有定义键。定义此 EntityType 的键。
更新!我尝试覆盖它要求我为其创建密钥的类,但它仍然不起作用
public class TestIdentityUserLogin : IdentityUserLogin
{
[Key]
public override string UserId { get; set; }
}
我尝试使用在此链接中找到的流利的 api 添加密钥 [实体类型 MVC5 EF6 中的用户
在我的YogaSpaceContext
我包括
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
它似乎从包管理器中删除了用于更新数据库的无键定义错误。但是我将如何首先在代码中实现它?