[英]ASP.Net Core: How do I update (change/add/remove) nested item objects (One-to-Many relationship)?
[英]How to add one-to-many relationship data to the database in ASP.NET Core?
我有两张表Person
和Round
,一个人可以参加很多轮,一轮只能包含一个人。
如何处理这种情况并在 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.