EfCore 表关系一对一,使用案例

本文介绍了如何使用EFCore建立和操作一对一的关系数据库,包括创建学生信息和成绩表的数据库结构,以及在C#中定义对应的实体类。通过示例展示了如何添加数据、查询包含成绩的学生信息,并通过条件筛选过滤掉没有成绩记录的学生。此外,还提到了EFCore的批量写入数据的相关资源链接。
摘要由CSDN通过智能技术生成

一、数据结构关系

---关系行数据库描述归类
---一对一
---【业务场景】学生的信息表-》学生的成绩表
create table Stu_Info(
StuID int identity(1,1),
StuName nvarchar(30) not null,
CreateTime datetime null,
primary key(StuID)
);
go

create table Stu_Score(
StuID int not null,
English decimal(18,2) null,
Chinese decimal(18,2) null,
primary key(StuID),
foreign key(StuID) references Stu_Info(StuID)
);
go

二、EF Core上下文对应

1.学生资料

    /// <summary>
    /// 学生信息
    /// </summary>
    internal class Stu_Info
    {
        [Key]
        public int StuID { get; set; }
        public string StuName { get; set; }
        public DateTime? CreateTime { get; set; }

        /// <summary>
        /// 外键响应,一对一
        /// </summary>
        public virtual Stu_Score Stu_Score { get; set; }
    }

2.学生成绩

    /// <summary>
    /// 学生的成绩记录
    /// </summary>
    internal class Stu_Score
    {
        [Key]
        public int StuID { get; set; }
        public decimal? English { get; set; }
        public decimal? Chinese { get; set; }
        /// <summary>
        /// 外键锁定
        /// </summary>
        [ForeignKey("StuID")]
        public virtual Stu_Info Stu_Info { get; set; }
    }

3.数据库上下文

    internal class StudentContext:DbContext
    {
        /// <summary>
        /// 链接字符串
        /// </summary>
        public static string SqlStr { get; set; } = "data source=.;initial catalog=Student;Trusted_Connection=True;";
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer(SqlStr);
            }
            base.OnConfiguring(optionsBuilder);
        }
        public virtual DbSet<Stu_Info> Stu_Info { get; set; }
        public virtual DbSet<Stu_Score> Stu_Score { get; set; }
    }

三、关系操作和筛选使用

1.添加学生信息和学生的成绩

static void Test1()
{
    StudentContext _context = new StudentContext();
    //添加学生信息
    Stu_Info stu = new Stu_Info()
    {
        StuName = "李四",
        CreateTime = DateTime.Now
    };
    //添加成绩信息
    Stu_Score score = new Stu_Score()
    {
        StuID = stu.StuID,
        Chinese = 100,
        English = 50
    };
    stu.Stu_Score = score;

    _context.Stu_Info.Add(stu);//保存到数据库
    _context.SaveChanges();

    Console.WriteLine(_context.Stu_Info.Count());
}

2.查询学生+成绩;过滤掉,没有成绩记录的学生

static void Test2()
{
    StudentContext _context = new StudentContext();
    var list = _context.Stu_Info.Include(q => q.Stu_Score)
        .Where(q=>q.Stu_Score!=null)  //条件筛选,过滤掉不存在关联表的数据
        .ToList();
    foreach (var item in list)
    {
        Console.WriteLine($"{item.StuName},英语成绩:{item.Stu_Score?.English},中文成绩:{item.Stu_Score?.Chinese}");
    }
}

如果不过滤,则显示所有学生:

更多:

EF Core 批量写入数据使用整理(二)Z.EntityFramework.Extensions.EFCore

EF Core 批量写入数据使用整理_EF Core批量插入数据(一)

Ef Core 使用Entity方式配置外键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值