如何解决一对多关系中的循环.netcore

问题描述 投票:0回答:1

我在 .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是一样的

我怎样才能使这种关系在没有循环问题的情况下双向工作?

谢谢

c# mysql .net-core relationship webapi
1个回答
0
投票

我没有测试过代码,但我相信从用户和项目模型中读取数据应该足够了,因为它包含了在一对多关系的两个方向上检索相关实体的必要方法。

从用户模型中读取项目数据:

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}");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.