繁体   English   中英

ASP.NET Core中如何将一对多的关系数据添加到数据库中?

[英]How to add one-to-many relationship data to the database in ASP.NET Core?

我有两张表PersonRound ,一个人可以参加很多轮,一轮只能包含一个人。

如何处理这种情况并在 ASP.NET 核心 Web API 中向数据库添加回合?

它应该在人 controller 还是圆形 controller 中? 以及如何使用实体框架来做到这一点? 我是否应该在Round Post Dto class 中包含PersonId属性

圆形 class:

public class Round
{
    [Key] public int RoundId { get; set; }
    [Required] public int RoundNumber { get; set; }
    [Required] public int HostScore { get; set; }

    public Person Person { get; set; }
}

人 class:

public class Person
{
    [Key] public int PersonId { get; set; }
    [Required] public string Username { get; set; } = default!;
    [Required] public string Email { get; set; } = default!;
    [Required] public string Password { get; set; } = default!;

    public List<Round> Rounds { get; set; }
}

你可以这样做:

public class Round
{
    [Key] public int RoundId { get; set; }
    [Required] public int RoundNumber { get; set; }
    [Required] public int HostScore { get; set; }

    [Required]
    [ForeignKey("Person")]
    public int PersonId { get; set; }
    public virtual Person Person { get; set; }
}

public class Person
{
    [Key] public int PersonId { get; set; }
    [Required] public string Username { get; set; } = default!;
    [Required] public string Email { get; set; } = default!;
    [Required] public string Password { get; set; } = default!;

    public virtual ICollection<Round> Rounds { get; set; }
}

如果您没有 em,您可能还需要这些使用

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

在 ef 中,要识别关系,您应该只在父 class 的键名中使用 Id 词。 例如:

public class Round
{
[Key] public int RoundId { get; set; }
[Required] public int RoundNumber { get; set; }
[Required] public int HostScore { get; set; }

public Person Person { get; set; }
public int PersonId { get; set; }
}


public class Person
{
[Key] public int Id { get; set; }
[Required] public string Username { get; set; } = default!;
[Required] public string Email { get; set; } = default!;
[Required] public string Password { get; set; } = default!;

public List<Round> Rounds { get; set; }
}

如果不想使用这个名字,可以使用fluent api

例如:

public class Round
{
    public int RoundId { get; set; }
    public int RoundNumber { get; set; }
    public int HostScore { get; set; }
    public Person Person { get; set; }
    public int PersonId { get; set; }

}


public class Person
{
    public int PersonId { get; set; }

    public string Username { get; set; } = default!;

    public string Email { get; set; } = default!;

    public string Password { get; set; } = default!;

    public List<Round> Rounds { get; set; }
}

public class RoundConfigurations : IEntityTypeConfiguration<Round>
{
    public void Configure(EntityTypeBuilder<Round> builder)
    {
        builder.HasOne(x => x.Person)
            .WithMany(x => x.Rounds)
            .HasForeignKey(x => x.PersonId);

        builder.HasKey(x => x.RoundId);

        builder.Property(x => x.HostScore).IsRequired();
        builder.Property(x => x.RoundNumber).IsRequired();

    }
}


public class PersonConfigurations : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.HasKey(x => x.PersonId);

        builder.Property(x => x.Username).IsRequired();
        builder.Property(x => x.Email).IsRequired();
        builder.Property(x => x.Password).IsRequired();

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM