LINQ在数据库中的应用:LINQ to SQL 和 Entity Framework

在数据库中使用LINQ进行CRUD操作(创建、读取、更新、删除)通常通过Entity FrameworkLINQ to SQL来实现。Entity Framework是一个更现代的ORM(对象关系映射)工具,具有更广泛的功能。因此,我将重点展示如何使用Entity Framework中的LINQ进行CRUD操作。

前置条件:

1.你需要安装Entity Framework(通过NuGet包EntityFramework)。

2.创建一个数据库上下文类和实体类,映射数据库中的表和字段。

Install-Package EntityFramework

步骤

1.引用的命名空间

在你的代码中,确保引入以下命名空间:

cs 复制代码
using System;
using System.Linq;
using System.Data.Entity;  // 用于Entity Framework
using System.Collections.Generic;

2.配置数据库上下文和实体类

首先需要创建一个数据库上下文类(继承DbContext),该类将管理与数据库的连接和查询。你还需要一个实体类来映射数据库中的表。

cs 复制代码
// 学生实体类,映射到数据库中的"Students"表
public class Student
{
    public int StudentId { get; set; }  // 主键
    public string Name { get; set; }
    public int Age { get; set; }
}

// 数据库上下文类,包含对数据库表的引用
public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }  // Students表
}

CRUD操作示例代码

1.Create(创建/插入操作)

通过Add()方法将新的实体对象插入到数据库表中。

cs 复制代码
using (var context = new SchoolContext())
{
    // 创建一个新的学生对象
    var newStudent = new Student
    {
        Name = "Alice",
        Age = 22
    };

    // 将新学生添加到Students表中
    context.Students.Add(newStudent);

    // 保存更改,将数据写入数据库
    context.SaveChanges();

    Console.WriteLine("New student created: " + newStudent.Name);
}

解释:

Add() 方法将新的学生对象添加到上下文的Students集合中。

SaveChanges() 将更改保存到数据库中。

2.Read(读取操作)

通过LINQ查询数据库中的数据,可以使用查询表达式或方法语法。

cs 复制代码
using (var context = new SchoolContext())
{
    // 使用LINQ查询所有学生
    var students = context.Students.ToList();

    // 打印所有学生信息
    foreach (var student in students)
    {
        Console.WriteLine($"StudentId: {student.StudentId}, Name: {student.Name}, Age: {student.Age}");
    }

    // 根据条件查询单个学生
    var singleStudent = context.Students.FirstOrDefault(s => s.Name == "Alice");
    if (singleStudent != null)
    {
        Console.WriteLine($"Found student: {singleStudent.Name}, Age: {singleStudent.Age}");
    }
}

解释:

ToList() 方法将查询结果转化为列表。

FirstOrDefault() 用于查询满足条件的第一个学生(如果没有符合条件的学生,则返回null)。

3.Update(更新操作)

通过查询并修改实体对象的属性,然后调用SaveChanges()将更改保存到数据库中。

cs 复制代码
using (var context = new SchoolContext())
{
    // 查找要更新的学生对象
    var studentToUpdate = context.Students.FirstOrDefault(s => s.Name == "Alice");

    if (studentToUpdate != null)
    {
        // 更新学生的年龄
        studentToUpdate.Age = 23;

        // 保存更改到数据库
        context.SaveChanges();

        Console.WriteLine("Student updated: " + studentToUpdate.Name);
    }
    else
    {
        Console.WriteLine("Student not found.");
    }
}

解释:

查询学生对象后,修改对象的Age属性,然后调用SaveChanges()将更新保存到数据库中。

4.Delete(删除操作)

通过查询要删除的实体对象,然后使用Remove()方法从上下文中删除该对象,最后调用SaveChanges()来保存删除操作。

cs 复制代码
using (var context = new SchoolContext())
{
    // 查找要删除的学生对象
    var studentToDelete = context.Students.FirstOrDefault(s => s.Name == "Alice");

    if (studentToDelete != null)
    {
        // 删除该学生对象
        context.Students.Remove(studentToDelete);

        // 保存更改到数据库
        context.SaveChanges();

        Console.WriteLine("Student deleted: " + studentToDelete.Name);
    }
    else
    {
        Console.WriteLine("Student not found.");
    }
}

解释

Remove() 方法从上下文中删除学生对象,SaveChanges() 保存删除操作到数据库。

运行CRUD操作的完整代码

以下是上述所有CRUD操作的完整代码示例,使用Entity Framework操作数据库中的Students表:

cs 复制代码
using System;
using System.Linq;
using System.Data.Entity;
using System.Collections.Generic;

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }  // 映射Students表
}

public class Program
{
    public static void Main()
    {
        using (var context = new SchoolContext())
        {
            // 1. Create - 插入新的学生数据
            var newStudent = new Student
            {
                Name = "Alice",
                Age = 22
            };
            context.Students.Add(newStudent);
            context.SaveChanges();
            Console.WriteLine("New student created: " + newStudent.Name);

            // 2. Read - 查询所有学生
            var students = context.Students.ToList();
            foreach (var student in students)
            {
                Console.WriteLine($"StudentId: {student.StudentId}, Name: {student.Name}, Age: {student.Age}");
            }

            // 3. Update - 更新学生信息
            var studentToUpdate = context.Students.FirstOrDefault(s => s.Name == "Alice");
            if (studentToUpdate != null)
            {
                studentToUpdate.Age = 23;
                context.SaveChanges();
                Console.WriteLine("Student updated: " + studentToUpdate.Name);
            }

            // 4. Delete - 删除学生
            var studentToDelete = context.Students.FirstOrDefault(s => s.Name == "Alice");
            if (studentToDelete != null)
            {
                context.Students.Remove(studentToDelete);
                context.SaveChanges();
                Console.WriteLine("Student deleted: " + studentToDelete.Name);
            }
        }
    }
}

总结:

Create :使用Add()方法向数据库中插入新对象。

Read :使用LINQ查询(ToList()FirstOrDefault())从数据库中读取数据。

Update :修改实体对象后,调用SaveChanges()保存更新。

Delete :使用Remove()删除对象,并调用SaveChanges()保存更改。

相关推荐
Themberfue11 分钟前
SQL ①-数据库 || MySQL
数据库·sql·mysql·数据库系统·数据库管理系统
Good Note22 分钟前
Golang的静态强类型、编译型、并发型
java·数据库·redis·后端·mysql·面试·golang
RisingWave中文开源社区1 小时前
一文详解物化视图(MV):定义、优势和用例
数据库·sql·数据分析
木谷羊宫切割1 小时前
玩机日记 12 群晖部署AList并配置SSL,安装opkg,使用rclone挂载到本地
服务器·网络协议·ssl
PingCAP1 小时前
TiDB Chat2Query 深度解析:我们如何打造一款更高效、准确的智能 SQL 生成工具?
数据库
想做富婆2 小时前
数仓搭建实操(传统数仓oracle):[构建数仓层次|ODS贴源层]
数据库·oracle·数仓
威哥爱编程2 小时前
如何解决 MySQL 数据库服务器 CPU 飙升的情况
数据库·mysql
vip1024p2 小时前
第二篇:MySQL安装与配置(基于小皮面板(phpstudy))
数据库·mysql·adb
limts2 小时前
Oracle中补全时间的处理
数据库·oracle
woshilys2 小时前
sql server 从库创建的用户名登录后访问提示数据库无权限
数据库·sqlserver