我有一张桌子:
public class TestModel
{
public int Id { get; set; }
public string UserId { get; set; }
public string Name { get; set; }
}
我希望UserId列是外键,Mvc Membership的用户ID列。 我怎么能做到这一点?
我的IdentityModels:
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
答案 0 :(得分:20)
添加对ApplicationUser
的引用并指定ForeignKey:
public class TestModel
{
public int Id { get; set; }
public string Name { get; set; }
public string UserId { get; set; }
[ForeignKey("UserId")]
public ApplicationUser User { get; set; }
}
将新模型添加到DbContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<TestModel> TestModels { get; set; }
/* rest of class */
}
你应该很好(可以减少迁移/数据库更新)。
答案 1 :(得分:0)
我不喜欢在[ForeignKey]
中使用TestModel
属性的想法。最好使用Fluent API执行此操作。以下是在UserId
表中添加TestModel
列并添加外键约束的代码:
public class TestModel
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
public class ApplicationUser : IdentityUser
{
public virtual TestModel TestModel { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection")
{
}
public DbSet<TestModel> TestModels { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>()
.HasOptional(m => m.TestModel)
.WithRequired(m => m.ApplicationUser)
.Map(p => p.MapKey("UserId"));
}
}
答案 2 :(得分:-1)
使用Visual Studio 2015时脚手架可能会遇到错误CS1061,Ater遵循了很好的答案: / ******** /
public class TestModel
{
public int Id { get; set; }
public string Name { get; set; }
public string UserId { get; set; }
[ForeignKey("UserId")]
public ApplicationUser User { get; set; }
}
将新模型添加到DbContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<TestModel> TestModels { get; set; }
/* rest of class */
}
/ ******** / 解 删除受影响控制器的控制器和视图, 在DbContext中重命名为 看起来像这样
public class ApplicationDbContext : IdentityDbContext<Users>
重新启动VS,然后重启脚手架。
免责声明:上述解决方案的作者不是仅为某人编辑和发布的。益处