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

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

  • 业务数据库
  • ASP.Net身份数据库

在将身份添加到我的项目之前,我已将所有用户信息存储在我的业务数据库中(使用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; }
}

然后,我的用户在注册时 Select 了两个角色:

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、密码、邮箱等信息,而需要在Identity one中存储.

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

推荐答案

没关系,我在这个答案中找到了需要的信息(尽管我以前搜索过,但我刚刚找到了整个帖子和答案)-using EF Core IdentityContext and DbContext both for order management

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

如果我想将所有数据存储在一个数据库中,那么我只需要将数据库上下文从IdentityDbContext继承.但事实并非如此,因为我想将这两个数据集彼此分离.

关于修改身份用户-这都在Yiyi You提到的文档中,您只需要创建一个类,该类将从"IdentityUser"继承,并带有一些我们希望在用户中使用的附加属性,在我们的数据库上下文(因此在"AddDbContext")和所述数据库上下文类(修改继承)中更改已使用的用户,然后只需迁移和更新.

Csharp相关问答推荐

需要澄清C#的Clean Architecture解决方案模板的AuditableEntityInterceptor类

实体核心框架--HasColumnType和HasPrecision有什么不同?

Select Many和默认IfEmpty内部Select Many错误工作

REST API端点中异步后台代码执行的类型

Blazor-从数据库内部服务器提取错误

.NET HttpClient、JsonSerializer或误用的Stream中的内存泄漏?

将轮询与超时同步

查找表中的模式

WeakReference未被垃圾收集

MigraDoc文档

StackExchange.Redis.RedisServerException:调用ITransaction.ExecuteAsync()时出现错误未知命令取消监视

将字节转换为 struct 并返回

Selify只更改第一个下拉菜单,然后忽略REST-C#

如何返回具有泛型的类?

如何在microsoft.clearscript.v8的jsondata中使用Linq

如何在Akka.NET中重新启动执行元时清除邮箱

当我try 在与XAMP的MySQL服务器连接的ASP.NET核心应用程序中添加迁移时出现错误

从HTML元素获取 colored颜色

使用postman 测试配置了身份的.NET 6应用程序

如何通过WinSCP判断SFTP会话中使用的加密算法?