Entity Framework Core 3.1 学习笔记3 一对一 多对多 一对多

一对一模型的建立:

示例:足球队员和简历的一对一关系:每个足球队员需要对应一份简历信息

足球队员模型:

using System;
using System.Collections.Generic;

namespace Demo.Domain
{
    public class Player
    {
        public Player() {
            GamePlayer = new List<GamePlayer>();
        }
        public int Id { get; set; }

        public string Name { get; set; }

        public DateTime DateOfBirth { get;set; }

        public List<GamePlayer> 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<Resume>().HasOne(x=>x.Player).WithOne(x=>x.Resume).HasForeignKey<Resume>(x=>x.PlayerId);
}

多对多的关系模型

示例:一场联赛有很多足球队员:每个足球队员可以参加多个联赛

联赛模型:

using System;
using System.Collections.Generic;
using System.Text;

namespace Demo.Domain
{
    public class Game
    {
        public Game() {
            GamePlayer = new List<GamePlayer>();
        }
        public int Id { get; set; }

        public int Round { get; set; }

        public DateTimeOffset? StartTiem { get; set; }

        public List<GamePlayer> GamePlayer { get; set; }
    }
}

足球队员模型:

using System;
using System.Collections.Generic;

namespace Demo.Domain
{
    public class Player
    {
        public Player() {
            GamePlayer = new List<GamePlayer>();
        }
        public int Id { get; set; }

        public string Name { get; set; }

        public DateTime DateOfBirth { get;set; }

        public List<GamePlayer> 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<GamePlayer>().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<Player>();
        }

        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<Player> Players { get; set; }
    }
}

定义足球队员模型:

using System;
using System.Collections.Generic;

namespace Demo.Domain
{
    public class Player
    {
        public Player() {
            GamePlayer = new List<GamePlayer>();
        }
        public int Id { get; set; }

        public string Name { get; set; }

        public DateTime DateOfBirth { get;set; }

        public List<GamePlayer> GamePlayer { get; set; }

        public int ResumeId { get; set; }


        public Resume Resume { get; set; }
    }
}

  

  

原文地址:https://www.cnblogs.com/tofight/p/14645284.html