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()保存更改。

相关推荐
安科瑞刘鸿鹏3 分钟前
老旧小区用电安全保护装置#限流式防火保护器参数介绍#
运维·服务器·物联网·能源
Rain_Rong23 分钟前
linux检测硬盘
linux·运维·服务器
我曾经是个程序员1 小时前
鸿蒙学习记录之http网络请求
服务器·学习·http
真真-真真1 小时前
WebXR
linux·运维·服务器
指尖上跳动的旋律2 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
轩辰~2 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
一勺菠萝丶2 小时前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
向宇it2 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
wanhengidc2 小时前
短视频运营行业该如何选择服务器?
运维·服务器
lucky_syq2 小时前
Hive SQL和Spark SQL的区别?
hive·sql·spark