当前位置: 首页 > article >正文

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.引用的命名空间

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

using System;
using System.Linq;
using System.Data.Entity;  // 用于Entity Framework
using System.Collections.Generic;

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

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

// 学生实体类,映射到数据库中的"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()方法将新的实体对象插入到数据库表中。

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查询数据库中的数据,可以使用查询表达式或方法语法。

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()将更改保存到数据库中。

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()来保存删除操作。

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表:

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


http://www.kler.cn/a/369642.html

相关文章:

  • 搭建 mongodb 副本集,很详细
  • 现代数字信号处理I--最佳线性无偏估计 BLUE 学习笔记
  • OpenGMS是什么?如何使用OpenGMS的建模与模拟工具(一)
  • Macos m系列芯片环境下安装python3以及mysqlclient流程以及遇到的一系列问题
  • git bisect和git blame
  • 摊牌了,创业失败了
  • 深度学习:YOLO V3 网络架构解析
  • centos系统安装oracle数据库教程(linux命令行安装)
  • kafka消息队列
  • Github 2024-10-22 Python开源项目日报Top10
  • HTTP与RPC
  • leetcode hot100【LeetCode 104. 二叉树的最大深度】java实现
  • 监控场景下,视频SDK的应用策略
  • Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍
  • 要将Burp Suite设置为中文,操作步骤
  • 基于SSM轻型卡车零部件销售系统的设计
  • 特种作业操作高压电工题库
  • 容器化核心快速入门
  • 隨筆 20241023 Kafka 的数据事
  • 11月12日Sui Connect: 曼谷站开启,准备好见面了吗?
  • 自考经历与学习总结
  • 【Spring】Spring Boot 配置文件(7)
  • Docker 私有仓库 Harbor介绍
  • go-zero 的使用
  • 深入解析 OceanBase 数据库中的局部索引和全局索引
  • 模型训练识别手写数字(一)