gpt4 book ai didi

asp.net - 在 MVC6 中扩展 Identity3

转载 作者:行者123 更新时间:2023-12-02 21:28:06 25 4
gpt4 key购买 nike

使用最新(当前)的 asp.net5 RC1,我正在考虑在 User 实体和 WorkLog 实体之间创建简单的关系。

是否可以使用 Identity 中的 ApplicationUser 类作为起点,并使用定义为链接 key 的 ApplicationUser key ?我过去在扩展 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; }
}

最佳答案

按照您的要求进行操作预计可以开箱即用。您可以查看this commit查看使用 Identity 新建的 MVC 6 项目与上面的架构之间的区别。

注册用户并刷新/Home/Index 会导致 WorkLogItem 按预期添加。请注意,您不需要为此使用单独的数据库上下文。

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();
}

将任何集合添加到现有实体时要注意的关键事项是:

  1. 确保添加迁移并更新数据库
  2. 请确保在查询中使用 Include,因为 EF7 does not support Lazy Loading .

关于asp.net - 在 MVC6 中扩展 Identity3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com