我的最终目标是与AspNetUsers'建立关系。如下图所示。只是代替“地址”而不是“地址”。我的实体是' YogaSpace'。
这是我遇到问题的地方。这是我到目前为止所做的。 首先,我在下面看到的两个实体中创建了属性。
public class ApplicationUser : IdentityUser
{
//code here left out
public virtual ICollection<YogaSpace> YogaSpaces { get; set; }
//code here left out
}
public class YogaSpace
{
// all other code left out to save space
public virtual ApplicationUser User { get; set; }
}
现在我在包管理器中更新我的数据库,并收到下面显示的错误消息。它说我没有为某些实体定义密钥。
所以我用Google搜索并将下面的代码添加到下面的YogaBandyContext.cs文件中。 *注意 - 这是我的DataAccess程序集
namespace YogaBandy.DataAccess.Context
{
public class YogaBandyContext : DbContext
{
public YogaBandyContext()
: base("name=YogaBandyDatabase")
{
}
//}
// code left out here to save space
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
}
我更新了数据库,发生了 NOTHING 。然后我意识到我在&#39; IdentityModel.cs&#39;中有另一个dbcontext类。此文件已创建,随Asp.Net MVC 5应用程序一起提供。 我从主要大会转移到包含所有我的域类的大会这是IdentityModel.cs,它位于&#39; DomainClasses&#39;部件。
namespace YogaBandy.DomainClasses.Models
{
public class ApplicationUser : IdentityUser
{
//other members here left out to save space
public virtual ICollection<YogaSpace> YogaSpaces { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("YogaBandyDatabase", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
}
我尝试再次更新数据库,没有运气。我仍然得到没有定义键的错误。
问题 - 那么我在创建AspNetUsers的引用时遇到问题,为什么我无法创建必要的密钥?是因为我有两个上下文文件,它们位于两个不属于asp.net mvc 5项目的程序集中,它们位于库中。我查看了我的数据库,看起来已经为下面显示的这些实体定义了键,对吧?那到底是怎么回事?