.net如何优雅的使用EFCore实例详解

  • Post category:C#

以下是关于“.NET如何优雅地使用EFCore实例详解”的完整攻略:

1. 什么是EFCore?

EFCore是.NET平台上的一个ORM(对象关系映射)框架,它可以将数据库中的数据映射到.NET对象中,使得开发人员可以使用.NET对象来操作数据库,而不必直接操作数据库。

2. 如何使用EFCore?

在.NET中,可以使用EFCore来操作数据库。可以按照以下步骤操作:

2.1. 示例1:使用EFCore进行基本的CRUD操作

在这个示例中,我们将演示如何使用EFCore进行基本的CRUD操作。可以按照以下步骤操作:

2.1.1. 创建.NET Core控制台应用程序

首先,我们需要创建一个.NET Core控制台应用程序。可以使用以下命令创建一个名为EFCoreDemo的应用程序:

dotnet new console -n EFCoreDemo

2.1.2. 添加EFCore

接下来,我们需要添加EFCore。可以按照以下步骤操作:

  1. EFCoreDemo项目中,使用以下命令安装EFCore:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
  1. Program.cs中添加以下代码:
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace EFCoreDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                .AddDbContext<MyDbContext>(options =>
                    options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"))
                .BuildServiceProvider();

            using (var context = serviceProvider.GetService<MyDbContext>())
            {
                // 添加数据
                context.Add(new Person { Name = "张三", Age = 20 });
                context.Add(new Person { Name = "李四", Age = 30 });
                context.SaveChanges();

                // 查询数据
                var people = context.People.ToList();
                foreach (var person in people)
                {
                    Console.WriteLine($"姓名:{person.Name},年龄:{person.Age}");
                }

                // 更新数据
                var personToUpdate = context.People.FirstOrDefault(p => p.Name == "张三");
                if (personToUpdate != null)
                {
                    personToUpdate.Age = 25;
                    context.SaveChanges();
                }

                // 删除数据
                var personToDelete = context.People.FirstOrDefault(p => p.Name == "李四");
                if (personToDelete != null)
                {
                    context.Remove(personToDelete);
                    context.SaveChanges();
                }
            }
        }
    }

    public class MyDbContext : DbContext
    {
        public DbSet<Person> People { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在上面的代码中,我们使用EFCore进行基本的CRUD操作。我们首先在Program.cs中添加了一个MyDbContext类,它继承自DbContext类,并包含一个People属性,它表示数据库中的Person表。然后,我们在Main方法中使用ServiceCollectionDbContextOptionsBuilder来配置EFCore。最后,我们使用context对象来进行基本的CRUD操作。

2.2. 示例2:使用EFCore进行高级查询操作

在这个示例中,我们将演示如何使用EFCore进行高级查询操作。可以按照以下步骤操作:

2.2.1. 创建.NET Core控制台应用程序

首先,我们需要创建一个.NET Core控制台应用程序。可以使用以下命令创建一个名为EFCoreDemo的应用程序:

dotnet new console -n EFCoreDemo

2.2.2. 添加EFCore

接下来,我们需要添加EFCore。可以按照以下步骤操作:

  1. EFCoreDemo项目中,使用以下命令安装EFCore:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
  1. Program.cs中添加以下代码:
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace EFCoreDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                .AddDbContext<MyDbContext>(options =>
                    options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"))
                .BuildServiceProvider();

            using (var context = serviceProvider.GetService<MyDbContext>())
            {
                // 添加数据
                context.Add(new Person { Name = "张三", Age = 20 });
                context.Add(new Person { Name = "李四", Age = 30 });
                context.SaveChanges();

                // 查询数据
                var people = context.People
                    .Where(p => p.Age > 25)
                    .OrderByDescending(p => p.Age)
                    .ToList();

                foreach (var person in people)
                {
                    Console.WriteLine($"姓名:{person.Name},年龄:{person.Age}");
                }
            }
        }
    }

    public class MyDbContext : DbContext
    {
        public DbSet<Person> People { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

在上面的代码中,我们使用EFCore进行高级查询操作。我们在Main方法中使用WhereOrderByDescending方法来查询年龄大于25的人,并按照年龄降序排列。最后,我们使用foreach循环来遍历查询结果。

3. 结论

通过以上步骤,我们可以使用EFCore进行基本的CRUD操作和高级查询操作。EFCore是.NET平台上的一个ORM框架,它可以将数据库中的数据映射到.NET对象中,使得开发人员可以使用.NET对象来操作数据库,而不必直接操作数据库。在使用EFCore时,我们可以使用DbContext类来表示数据库上下文,并使用DbSet类来表示数据库中的表。我们可以使用EFCore进行基本的CRUD操作和高级查询操作,以满足不同的需求。