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

相关推荐
cl°23 分钟前
WPF中视觉树和逻辑树的区别和联系
经验分享·学习·c#·wpf
HEX9CF34 分钟前
【Linux】SQLite 数据库安装教程(Ubuntu 22.04)
linux·数据库·sqlite
恬淡虚无真气从之42 分钟前
django中entity.save(using=)的使用
数据库·python·django
零希1 小时前
正则表达式
java·数据库·mysql
任错错1 小时前
flinksql-Queries查询相关实战
大数据·数据库·mysql·flink·flinksql
Mephisto.java1 小时前
【力扣 | SQL题 | 每日4题】力扣2004, 1454,1613,1709
hive·sql·mysql·leetcode·oracle·database
史迪仔01121 小时前
【SQL】SQL函数
数据库·sql
danplus1 小时前
外贸邮件营销群发:如何避免成为垃圾邮件?
服务器·api接口·邮件营销·smtp服务器·邮件接口·营销邮件·域名邮箱
琪露诺大湿1 小时前
JavaEE-多线程初阶(1)
java·linux·开发语言·jvm·数据库·java-ee·1024程序员节
代码的奴隶(艾伦·耶格尔)2 小时前
sql进阶篇
java·数据库·sql