ApplicationUser和Custom模型类的多对多关系



我正在尝试实现以下案例场景:有一个自定义表,比方说Task,我想创建与类Applicationuser的多对多关系。

目前我有以下项目arcitechture:

- Client
- Server
- ApplicationUser.cs
- Shared
- Task.cs

以下是类别:

共享程序集中的Task.cs:

public class Task
{      
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<ApplicationUser> ApplicationUsers { get; set; }    
public List<ApplicationUserTask> ApplicationUserTasks { get; set; }
}

服务器程序集中的ApplicationUser.cs:

public class ApplicationUser : IdentityUser
{
public Guid Id { get; set; }
public ICollection<Task> Tasks { get; set; }    
public List<ApplicationUserTask> ApplicationUserTasks { get; set; }
}

根据微软的文档,我需要创建一个新的类,名为:

public class ApplicationUserTask
{      
public int ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public int TaskId { get; set; }
public Task Task { get; set; }
}

在客户端和服务器中存在对共享程序集的引用。然而,由于目前的结构,不可能有这样的关系,我需要将ApplicationUser.cs类移动到共享程序集,但随后我与NuGet包发生冲突,因为这是一个using Microsoft.AspNetCore.Identity;

我该怎么办?

  1. 在共享程序集中创建新类?例如UserModel.cs,并使用此操作?在这种情况下,DB中会有新的表。那么我应该不断地将ApplicationUser表复制到UserModel表吗
  2. 将Task.cs移动到服务器程序集根据Microsoft文档执行所有过程,然后将TaskDTO.cs创建到共享程序集并通过DTO模型与客户端通信
  3. 还有其他更好的选择吗

我正在使用:<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />

我该怎么办?

选项2(是最好的,imho。

IdentityUser属于一个封闭库,您不想在客户端中引用该库。它还包含许多您不需要或不想在API中公开的字段。

您的问题来自于尝试将Model和DTO类组合在一起。这不是最好的做法,尽管我承认它在一个(非常(小的应用程序中可能很有吸引力。

因此,将模型保留在服务器项目中,并将定制的DTO类放在Shared中。现在,它只对User类是必不可少的,但当你的项目增长时,你会很高兴你也为剩下的部分做了。

相关内容

  • 没有找到相关文章

最新更新