如何正确地合并ApplicationDbContext与您的自定义DbContext
本文关键字:自定义 DbContext ApplicationDbContext 正确地 合并 | 更新日期: 2023-09-27 17:54:08
我想做以下事情…当user
提交一个新的article
时,我想在我的web应用程序中显示作者(用户)的用户名。这就是为什么我需要"连接"这两个,我想只有1 DbContext。
现在我这样做:
public class ApplicationDbContext : IdentityDbContext
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
private DbSet<Article> Articles { get; set; } // This line is all i have added/changed. Everything else was auto-generated when i created a new ASP.net MVC project with individual authentication in visual studio.
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
但我不确定这是不是正确的方法。如何正确地做到这一点呢?
UPDATE(解释我对DavidG的回答的评论)
首先我像这样检索用户列表:
class ApplicationUserService
{
public List<ApplicationUser> GetUsers()
{
using (var dbContext = new ApplicationDbContext())
{
return dbContext.ApplicationUsers.ToList();
}
}
}
代替:
class ApplicationUserService
{
public List<IdentityUser> GetUsers()
{
using (var dbContext = new ApplicationDbContext())
{
return dbContext.Users.ToList();
}
}
}
问题是,我不能得到用户名或任何其他属性,因为这个错误。我在网上看了一些教程,没有人提到DbSet是Users。不管怎样…现在我知道为什么我不需要这个属性了:
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
来自VS的这条消息帮助了我(旨在帮助其他可能遇到同样问题的人):
'ApplicationDbContext.Users' hides inherited member 'IdentityDbContext<IdentityUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>.Users'.
如果您想使用一个上下文,并且Identity表与"article"表位于同一数据库中,则可以这样做。我通常喜欢重写OnModelCreating,这样我就可以为我创建的表添加映射/配置。
根据应用程序的大小,我保留Identity上下文,并为我的应用程序创建一个(我可能包括Users表,以便更容易检索用户)。
您的应用程序只需要从IdentityDbContext
类的正确版本继承。您需要使用通用类,这样您就可以使用自己的IdentityUser
定制用户类。所以你的语境应该是这样的。注意新的继承和删除了ApplicationUsers
属性。这被删除,因为Identity
类已经为您完成了。
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
private DbSet<Article> Articles { get; set; }
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}