我将使用身份框架(代码优先方式)创建一个数据库,但是当我在包管理器中运行下面的代码时出现错误。
PM> Enable-Migrations -ContextTypeName FreeTime.AspMvc.Context.FreeTimeContext -Force
这是我的错误:
IdentityUserLogin: : EntityType IdentityUserLogin
没有定义键。为此定义密钥EntityType
。
IdentityUserRole: : EntityType IdentityUserRole
没有定义键。为此定义密钥EntityType
。
IdentityUserLogins: EntityType: EntitySet IdentityUserLogins
基于IdentityUserLogin
没有定义键的类型。
IdentityUserRoles: EntityType: EntitySet IdentityUserRoles
基于IdentityUserRole
没有定义键的类型。
更多信息:
在其他类中,我创建了一个名为的属性类型,ApplicationUser
并且为持有女巫用户UserId
命名的字符串类型之一已成为女巫主题。User
这里有一个例子:
public class Topic
{
[Key]
public int TopicId { get; set; }
[ForeignKey("dbo.AspNetUsers.Id")]
public string UserId { get; set; }
public ApplicationUser User { get; set; }
}
小更新:这是我的上下文文件:
public class FreeTimeContext: DbContext
{
public DbSet<Topic> Topics { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
我还看到有第二个上下文文件名为ApplicationDbContext
.
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("FreeTimeContext" /* --> this I've edited into my own name */,
throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
大更新:在后来的状态中,我尝试了其他类似下面列表的方法:
-
首先,我尝试为
ApplicationDbContext
. 这是我已经完成的步骤。-
首先我运行了这段代码:
PM> 启用迁移-ContextTypeName FreeTime.AspMvc.Models.ApplicationDbContext -Force
这是在没有错误的情况下完成的。
-
然后我运行了这个:
PM> 添加迁移“initAspTables”
这段代码也没有问题。
-
最后我更新了我的数据库:
PM>更新-数据库
也顺利完成。
-
检查表是否创建到服务器管理器中→检查但不包含我自己的表。☹
结论:不是我将拥有的。
-
我做的第二件事是继承
FreeTimeContext
而ApplicationContext
不是DbContext
下面的代码。公共类 FreeTimeContext:ApplicationDbContext { 公共 DbSet 主题 { 获取;放; } 公共 FreeTimeContext(): 基数() { } // 其他代码 }
再次尝试使用以下代码启用迁移:
PM> 启用迁移 -ContextTypeName FreeTime.AspMvc.Context.FreeTimeContext -Force
但我有这个错误:
on 类型的
ForeignKeyAttribute
on 属性无效。在依赖类型上找不到导航属性。Name 值应该是有效的导航属性名称。UserId
FreeTime.AspMvc.Models.Topic
dbo.AspNetUsers.Id
FreeTime.AspMvc.Models.Topic
更多信息:
(点击查看全屏)
结论:没用。
你能帮助我吗?我不知道我还能做些什么来将该类ApplicationUser
连同我自己的类一起迁移到数据库中。