【发布时间】:2022-01-12 17:18:06
【问题描述】:
我正在尝试实现以下案例场景: 有一个自定义表,假设是 Task,我想与类 Application 用户创建多对多关系。
目前我有以下项目架构:
- 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; }
}
Server 程序集中的ApplicationUser.cs:
public class ApplicationUser : IdentityUser
{
public Guid Id { get; set; }
public ICollection<Task> Tasks { get; set; }
public List<ApplicationUserTask> ApplicationUserTasks { get; set; }
}
根据Microsoft docs,我需要创建一个新类,名为:
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;
我该怎么办?
- 在共享程序集中创建新类?例如 UserModel.cs 并使用这个进行操作?在这种情况下,数据库中会有新表。我应该不断地将 ApplicationUser 表复制到 UserModel 表吗?
- 将Task.cs 移至Server 程序集根据Microsoft 文档执行所有程序,然后将TaskDTO.cs 创建到共享程序集并通过DTO 模型与客户端通信?
- 还有其他更好的选择吗?
我正在使用:<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
【问题讨论】:
-
你使用什么 EFCore(从链接资源暗示 - 如果不正确,说明正确的 ORM)版本?
-
在这种情况下,DB 中会有新表 - 典型的 RDBMS 不支持 M:M,因此我们分解为两个 1:M。你是否在 C# 端看到这个取决于 EF 版本和设置
-
旁注,拥有自己的类 Task 会让您对 Threadng.Task 产生无尽的困惑。想别的名字。
-
@HenkHolterman 这只是一个例子。我真正的班级名称是 Project.cs :)
标签: c# sql asp.net asp.net-core blazor