我在 .net core 7 中有一个带有 mysql 数据库的 webapi 项目,当我做一对多关系时,只能在一个方向上工作。在其他方向我有一个循环问题。
这是一个模型,具有相同的 Dto
public class User
{
public int Id { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Column(TypeName = "VARCHAR")]
[StringLength(30)]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Column(TypeName = "VARCHAR")]
[StringLength(100)]
public string Password { get; set; }
public string Role { get; set; }
//NAVIGATION
public ICollection<Project> Projects { get; set; }
}
这是第二个模型
public class Project
{
public int Id { get; set; }
[Required]
[Column(TypeName = "VARCHAR")]
[StringLength(100)]
public string Name { get; set; }
[Column(TypeName = "VARCHAR")]
[StringLength(250)]
public string Description { get; set; }
[Required]
public int UserId { get; set; }
public User User { get; set; }
}
模型和dto是一样的
我怎样才能使这种关系在没有循环问题的情况下双向工作?
谢谢
我没有测试过代码,但我相信从用户和项目模型中读取数据应该足够了,因为它包含了在一对多关系的两个方向上检索相关实体的必要方法。
从用户模型中读取项目数据:
int userId = 1;
var userWithProjects = dbContext.Users
.Include(u => u.Projects)
.SingleOrDefault(u => u.Id == userId);
if (userWithProjects != null)
{
foreach (var project in userWithProjects.Projects)
{
Console.WriteLine($"Project ID: {project.Id}, Name: {project.Name}, Description: {project.Description}");
}
}
从项目模型中读取用户数据:
int projectId = 1;
var projectWithUser = dbContext.Projects
.Include(p => p.User)
.SingleOrDefault(p => p.Id == projectId);
if (projectWithUser != null)
{
Console.WriteLine($"Project ID: {projectWithUser.Id}, Name: {projectWithUser.Name}, Description: {projectWithUser.Description}, User ID: {projectWithUser.UserId}");
if (projectWithUser.User != null)
{
Console.WriteLine($"User ID: {projectWithUser.User.Id}, Email: {projectWithUser.User.Email}, Role: {projectWithUser.User.Role}");
}
}