我将创建一个带有身份框架的数据库(代码第一种方式),但是当我在包管理器中运行下面的代码时,我会出错。
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
的{{1}}属性类型,以及一个名为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();
}
}
的迁移。以下是我已经完成的步骤。
首先我运行此代码:
PM> enable-migrations -ContextTypeName FreeTime.AspMvc.Models.ApplicationDbContext -Force
这样做没有错误。
然后我运行了这个:
PM> add-migration "initAspTables"
此代码也没有问题。
最后我更新了我的数据库:
PM> Update-Database
也没有问题。
检查表是否已创建到服务器管理器→检查但不包含我自己的表。 ☹
结论:不是我真正拥有的。
我做的第二件事是从ApplicationDbContext
而不是FreeTimeContext
继承ApplicationContext
,如下面的代码。
public class FreeTimeContext: ApplicationDbContext { public DbSet Topics { get; set; } public FreeTimeContext(): base() { } // other code }
再次尝试使用此代码启用迁移:
PM> enable-migrations -ContextTypeName FreeTime.AspMvc.Context.FreeTimeContext -Force
但我有这个错误:
DbContext
类型的ForeignKeyAttribute
属性UserId
无效。在依赖类型FreeTime.AspMvc.Models.Topic
上找不到导航属性dbo.AspNetUsers.Id
。 Name值应该是有效的导航属性名称。
更多信息:
(点击查看全屏)结论:无效。
FreeTime.AspMvc.Models.Topic
和我自己的类一起迁移到数据库中。