在使用asp.net Identity时,是否应该在业务数据库中存储额外的用户信息?



所以-我刚刚开始在我的新手项目中使用asp.net Identity框架,但是我偶然发现了一个关于用户的逻辑问题,我不知道如何解决,所以让我告诉我的意思。

在我的web项目中,我使用两个数据库(它们都使用不同的数据库上下文):

业务数据库
  • asp.net身份数据库

在将Identity添加到我的项目之前,我已经将所有用户信息存储在我的业务数据库中(使用EntityFramework Core进行迁移等),它们的模型如下:

public abstract class User
{     
public int Id { get; set; }
[Required(ErrorMessage = "Input login")]
public string Login { get; set; }
[Required(ErrorMessage = "Input password")]
[Display(Name = "Password")]
public string Pswrd { get; set; }
[Required(ErrorMessage = "Input mail")]
[Display(Name = "E-mail")]
public string Email { get; set; }
[Display(Name = "Phone number (optional)")]
[Range(111111111, 999999999)]
public int Phone_nr { get; set; }
}

然后我为我的用户设置了两个角色,它们是在注册时选择的:

public class Poster : User
{
[Display(Name = "Questions asked (total)")]
public int Total_posted { get; set; }

//1 to N
public List<Question> Questions { get; set; }
}
public class Answerer : User
{
[Display(Name = "Answers posted (total)")]
public int Total_answered { get; set; }

//1 to N
public List<Question> Questions { get; set; }
}

现在-当我已经添加身份到我的项目(连同数据库包含的东西,如用户,角色等),我认为我不需要存储信息,如id,密码,电子邮件在我的业务数据库,但在身份之一。

然后是我的问题和我的问题-应该所有的用户信息存储在身份数据库中,通过自定义IdentityUser类,所以它将包含一些额外的属性,只是在业务数据库中抛弃用户表?因为如果是,那么我将如何包含像外键这样的东西(或者实际上-它们的替代方案是什么,因为我不知道在两个不同的数据库之间是否可能)?因为它可以看到——我的用户类必须包括对其他类的引用("Question">

没关系,我在这个答案中找到了所需的信息(即使我之前搜索过,我刚刚找到了整个帖子和答案)-使用EF Core IdentityContext和DbContext进行订单管理

所以基本上-如果我想使用独立的数据库与实体相互关联,那么我必须创建一种基于使用一些属性的动态关系将被"共享"在这两个实体之间。然后,我可以使用其中一个属性(在两个实体中具有相同的值)来选择应该与之相关的其他实体。

如果我想将所有数据存储在一个数据库中,那么我只需使我的数据库上下文继承自IdentityDbContext。但这里的情况并非如此,因为我想将两个数据集彼此分开。

关于修改身份用户——这都在Yiyi You提到的文档中,你只需要创建一个类来继承"IdentityUser"使用我们想要的用户的一些附加属性,在我们的数据库上下文中(因此在"AddDbContext"中)和数据库上下文中类(修改继承)更改used user,然后只需迁移和更新。

相关内容

最新更新