我将DbContext分为两部分:ApplicationContext
(仅特定于域的实体)和IdentityContext
(仅asp.net核心标识实体)。
但是,我需要向ApplicationUser
实体(IdentityContext
)添加一个外键,指向在ApplicationContext
中创建的称为UserArea
的实体。这样,我将拥有一个用于所有公司领域的表,而Aspnetusers
表将具有一个引用UserArea.Id
的列。
实现上下文的唯一方法是在上下文之间复制实体(在两个上下文中创建Area
实体吗?
如何处理迁移的执行顺序,因为我可能有一个表取决于IdentityContext
迁移,同时又有一个来自IdentityContext
的表(取决于来自{{1 }}?
这里的整个想法是减少我的应用程序的域层与第三方资源(例如ApplicationContext
和Entity Framework
)之间的耦合。
Identity
ApplicationUser类:
public class ApplicationContext : DbContext
{
public virtual DbSet<UserArea> UserAreas { get; set; }
}
public class IdentityContext : IdentityDbContext<ApplicationUser>, IDisposable
{
private readonly IConfiguration _configuration;
public IdentityContext(DbContextOptions<IdentityContext> options, IConfiguration configuration)
: base(options)
{
_configuration = configuration;
}
public DbSet<UserAudit> UserAuditEvents { get; set; }
}
UserArea类:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateRegistered { get; set; }
}
答案 0 :(得分:0)
将这两个DbContext作为单独的DbContext进行处理,它们之间没有任何关系。您可以使用手动分配的ID(GUID)来表示它们之间的关系。
想象一下第三方身份服务器和JWT身份验证(Auth0,Okta,IdentityServer)-因此,它基本上是IdentityDbContext的实现。后端将获得该用户的唯一标识符。请参阅:https://tools.ietf.org/html/rfc7519#section-4和子值。
您的数据库上下文必须具有:
无论如何,这应该进行必要的去耦。
现在可以创建用户了: