Entity Framework Core 3.1 学习笔记3 一对一 多对多 一对多
一对一模型的建立:
示例:足球队员和简历的一对一关系:每个足球队员需要对应一份简历信息
足球队员模型:
using System; using System.Collections.Generic; namespace Demo.Domain { public class Player { public Player() { GamePlayer = new List(); } public int Id { get; set; } public string Name { get; set; } public DateTime DateOfBirth { get;set; } public List GamePlayer { get; set; } public int ResumeId { get; set; } public Resume Resume { get; set; } } }
简历模型:
using System; using System.Collections.Generic; using System.Text; namespace Demo.Domain { public class Resume { public int Id { get; set; } public string Description { get; set; } public int PlayerId { get; set; } public Player Player { get; set; } } }
在Player中定义 ResumeId和Resume模型,在Resume表中定义PlayerId和Player模型
在DataContext中定义两者的关系
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasOne(x=>x.Player).WithOne(x=>x.Resume).HasForeignKey (x=>x.PlayerId); }
多对多的关系模型
示例:一场联赛有很多足球队员:每个足球队员可以参加多个联赛
联赛模型:
using System; using System.Collections.Generic; using System.Text; namespace Demo.Domain { public class Game { public Game() { GamePlayer = new List(); } public int Id { get; set; } public int Round { get; set; } public DateTimeOffset? StartTiem { get; set; } public List GamePlayer { get; set; } } }
足球队员模型:
using System; using System.Collections.Generic; namespace Demo.Domain { public class Player { public Player() { GamePlayer = new List(); } public int Id { get; set; } public string Name { get; set; } public DateTime DateOfBirth { get;set; } public List GamePlayer { get; set; } public int ResumeId { get; set; } public Resume Resume { get; set; } } }
足球队员跟联赛关系模型:
using System; using System.Collections.Generic; using System.Text; namespace Demo.Domain { public class GamePlayer { public int PlayerId { get; set; } public int GameId { get; set; } public Game Game { get; set; } public Player Player { get; set; } } }
在DataContext中定义两者的关系
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasKey(x => new{ x.PlayerId, x.GameId }); }
一对多的关系模型
示例:一个俱乐部有多个很多足球队员
定义俱乐部模型:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; namespace Demo.Domain { public class Club { public Club() { Players = new List(); } public int Id { get; set; } public string Name { get; set; } public string City { get; set; } [Column(TypeName ="date")] public DateTime DateOffEstablishment { get; set; } public string History { get; set; } public League League { get; set; } public List Players { get; set; } } }
定义足球队员模型:
using System; using System.Collections.Generic; namespace Demo.Domain { public class Player { public Player() { GamePlayer = new List(); } public int Id { get; set; } public string Name { get; set; } public DateTime DateOfBirth { get;set; } public List GamePlayer { get; set; } public int ResumeId { get; set; } public Resume Resume { get; set; } } }