在MVC6中扩展Identity3

3
使用最新的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个回答

2
做你要求的事情应该可以直接使用。你可以查看这个提交,了解新创建的MVC 6项目与上面的模式之间的区别。
注册用户并刷新 /Home/Index 导致 WorkLogItem 如预期般添加。请注意,您不需要单独的 DB 上下文来完成此操作。
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不支持延迟加载

非常有帮助,当我浏览那个代码库时真的很有用。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接