【发布时间】:2017-03-13 14:50:42
【问题描述】:
假设我在 EF 生成的数据库中有一个 Todo 模型和对应的 Todo 表 (DbSet<Todo>)。该表将每行存储一个待办事项。每个用户(在 ASP.NET Core Identity + IdentityServer 应用程序中)将与多个待办事项相关联(一对多,一个用户可以拥有多个待办事项)。
我这样做的方法是在 Todo 模型中添加一个 UserId 外键,该模型代表拥有待办事项的用户。
在使用 ASP.NET Core Identity 证明的类的同时,我将如何使用 EF Core 做到这一点?我的直觉是将以下内容添加到 Todo 类模型中:
public string UserId { get; set; }
[ForeignKey("UserId")]
public ApplicationUser User { get; set; }
这使用ApplicationUser(ASP.NET Core Identity 默认用户类模型)作为发现,用外键填充UserId。
问题是:当我运行Update-Database 时,我得到一个错误!它说The entity type 'IdentityUserLogin<string>' requires a primary key to be defined.。
浏览IdentityUserLogin 的代码,我可以看到它有一个属性UserId,应该被视为主键,对吧?
无论如何,为了确保它注册为主键,我将此代码添加到ApplicationUser 的OnModelCreating 方法:builder.Entity<ApplicationUser>().HasKey(u => u.Id);。我仍然得到同样的错误!不知道我在这里做错了什么:(。编辑:是的,我调用了基类,所以这不是问题。
注意:我知道我可以为每个用户添加一个包含待办事项 ID 集合而不是外键的字段,但我不确定这是否是这样做的好方法。对此问题的指导表示赞赏。
【问题讨论】:
标签: asp.net database entity-framework asp.net-web-api asp.net-core