在 MVC6 中扩展 Identity3
Posted
技术标签:
【中文标题】在 MVC6 中扩展 Identity3【英文标题】:Extending Identity3 in MVC6 【发布时间】:2016-03-28 20:18:50 【问题描述】:使用 asp.net5 的最新(当前)RC1,我正在研究在 User 实体和 WorkLog 实体之间创建简单的关系。
是否可以使用 Identity 中的 ApplicationUser 类作为起点并使用定义为链接键的 ApplicationUser 键?我过去在扩展 ApplicationUser 时遇到了问题,因此生成了一个单独的 dbcontext(指向同一个数据库)并创建了我自己的管道,以便将 IdentityUsers Id 传递到我的单独 dbcontext 中。有没有人有任何扩展 IdentityDbContext 的例子,添加外键表映射到 IdentityUser 类?
以下示例
//DBContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
public DbSet<WorkLogItem> WorkLogItems get; set;
protected override void OnModelCreating(ModelBuilder builder)
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
builder.Entity<WorkLogItem>(
e =>
e.Property(p => p.id).IsRequired().UseSqlServerIdentityColumn();
);
//WorkLogItem
public class WorkLogItem
public int id get; set;
public String UserId get; set;
public int Hours get; set;
public String Description get; set;
//ApplicationUser
public class ApplicationUser : IdentityUser
public ICollection<WorkLogItem> WorkLogItems get; set;
【问题讨论】:
【参考方案1】:按照您的要求去做应该是开箱即用的。您可以查看 this commit 以了解新创建的具有 Identity 的 MVC 6 项目与上述架构之间的区别。
注册用户并刷新 /Home/Index 会导致 WorkLogItem
s 按预期添加。请注意,您不需要单独的数据库上下文。
public IActionResult Index()
var user = _db.Users.Include(p => p.WorkLogItems).FirstOrDefault();
if (user != null)
user.WorkLogItems.Add(new WorkLogItem Description = "New item added" );
_db.SaveChanges();
ViewBag.WorkItems = user.WorkLogItems.ToList();
else ViewBag.WorkItems = new WorkLogItem[] ;
return View();
将任何集合添加到现有实体时要注意的关键项是;
-
确保添加迁移并更新数据库
确保在查询中使用
Include
,因为EF7 does not support Lazy Loading。
【讨论】:
很好的帮助,当我浏览那个 repo 时真的很有帮助。以上是关于在 MVC6 中扩展 Identity3的主要内容,如果未能解决你的问题,请参考以下文章