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

网站永久空间密山网站建设

网站永久空间,密山网站建设,安徽池州做网站的公司,做go分析的网站深入理解C#中的Entity Framework框架:从理论到实践 在C#开发中,与数据库交互是几乎所有应用程序的核心需求之一。Entity Framework (EF) 作为微软官方推出的ORM框架,极大地简化了数据库操作。本文将带您深入理解EF框架的核心概念&#xff0c…

深入理解C#中的Entity Framework框架:从理论到实践

在C#开发中,与数据库交互是几乎所有应用程序的核心需求之一。Entity Framework (EF) 作为微软官方推出的ORM框架,极大地简化了数据库操作。本文将带您深入理解EF框架的核心概念,并通过详细代码示例演示增删改查(CRUD)操作的完整实现。

一、Entity Framework框架概述

Entity Framework是微软开发的开源对象关系映射(ORM)框架,它充当了应用程序对象与数据库之间的桥梁。通过EF,开发者可以使用面向对象的编程方式操作数据库,而无需直接编写SQL语句。EF支持两种主要开发模式:

Code First:先编写实体类,然后通过迁移生成数据库表结构
Database First:基于现有数据库生成实体类

本文将重点演示Code First模式,这是现代开发中更常用的方式。

二、核心概念详解

1. DbContext

DbContext是EF框架的核心类,代表数据库会话。它管理所有实体对象的生命周期,并提供与数据库交互的入口点。每个DbContext实例对应一个数据库连接

2. DbSet

DbSet代表数据库中的表,用于执行CRUD操作每个DbSet属性对应数据库中的一个表

3. 迁移(Migrations)

迁移是EF框架的数据库版本控制机制。通过迁移,开发者可以使用C#代码来更新数据库结构,保持模型与数据库同步。

4. 实体类

实体类是与数据库表对应的POCO(Plain Old CLR Object)类。通过数据注解或Fluent API可以配置实体类与数据库表的映射关系

三、环境准备与代码实现

1. 创建项目并安装NuGet包

首先创建一个新的C#控制台应用程序,然后通过NuGet包管理器安装以下包:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design

2. 定义实体类

创建Student.cs文件,定义学生实体类:

using System.ComponentModel.DataAnnotations;public class Student
{[Key]public int StudentId { get; set; }[Required][MaxLength(50)]public string Name { get; set; }public DateTime EnrollmentDate { get; set; }public bool IsActive { get; set; }
}

3. 创建DbContext

创建SchoolContext.cs文件,继承DbContext

using Microsoft.EntityFrameworkCore;public class SchoolContext : DbContext
{public SchoolContext(DbContextOptions<SchoolContext> options): base(options) { }public DbSet<Student> Students { get; set; }
}

4. 配置连接字符串

appsettings.json中添加数据库连接字符串:

{"ConnectionStrings": {"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=SchoolDB;Trusted_Connection=True;"}
}

5. 注册服务

Program.cs注册DbContext服务

using Microsoft.EntityFrameworkCore;var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");var configuration = builder.Build();builder.Services.AddDbContext<SchoolContext>(options =>options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));var app = builder.Build();

6. 创建并应用迁移

打开命令行工具,执行以下命令:

dotnet ef migrations add InitialCreate
dotnet ef database update

这将生成初始迁移并更新数据库创建Students表

四、CRUD操作实现

创建StudentRepository.cs文件,实现CRUD操作:

using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Threading.Tasks;public class StudentRepository
{private readonly SchoolContext _context;public StudentRepository(SchoolContext context)//通过构造方法取出SchoolContext 实例{_context = context;}// 创建学生public async Task CreateAsync(Student student){_context.Students.Add(student);await _context.SaveChangesAsync();}// 获取所有学生public async Task<List<Student>> GetAllAsync(){return await _context.Students.ToListAsync();}// 根据ID获取学生public async Task<Student> GetByIdAsync(int id){return await _context.Students.FindAsync(id);}// 更新学生public async Task UpdateAsync(Student student){_context.Entry(student).State = EntityState.Modified;await _context.SaveChangesAsync();}// 删除学生public async Task DeleteAsync(int id){var student = await _context.Students.FindAsync(id);if (student != null){_context.Students.Remove(student);await _context.SaveChangesAsync();}}
}

五、使用示例

Main方法中演示CRUD操作:

var studentRepository = new StudentRepository(app.Services.GetRequiredService<SchoolContext>());// 创建学生
var newStudent = new Student 
{Name = "张三",EnrollmentDate = DateTime.Now,IsActive = true
};
await studentRepository.CreateAsync(newStudent);// 查询所有学生
var students = await studentRepository.GetAllAsync();
foreach (var student in students)
{Console.WriteLine($"ID: {student.StudentId}, 姓名: {student.Name}");
}// 更新学生
var studentToUpdate = await studentRepository.GetByIdAsync(1);
if (studentToUpdate != null)
{studentToUpdate.Name = "李四";await studentRepository.UpdateAsync(studentToUpdate);
}// 删除学生
await studentRepository.DeleteAsync(1);

六、注意事项

异常处理:实际开发中应添加try-catch块处理数据库操作异常
依赖注入:推荐使用依赖注入管理DbContext生命周期
数据库选择:可根据需要替换为MySQL、PostgreSQL等其他数据库提供程序
性能优化:对于复杂查询,建议使用AsNoTracking()提升性能
事务处理:需要事务时可以使用DbContext.Database.BeginTransaction()

七、结语

Entity Framework框架通过其强大的ORM功能,极大地简化了C#应用程序中的数据库操作。通过Code First模式,开发者可以更加专注于业务逻辑的实现,而无需关心底层数据库结构的细节。本文演示了EF框架的基本使用方法,实际项目中可以根据需求添加更多功能如分页查询、复杂查询、缓存机制等。


文章转载自:

http://vdSlZP3L.zqcdL.cn
http://qB5OPNb4.zqcdL.cn
http://G0IgaOEY.zqcdL.cn
http://C8hpJS1V.zqcdL.cn
http://YKarxIfM.zqcdL.cn
http://5znaGQwe.zqcdL.cn
http://GTrccheX.zqcdL.cn
http://ZbVpPz1P.zqcdL.cn
http://Ja5zCKUs.zqcdL.cn
http://4VijOnzZ.zqcdL.cn
http://Vv5omWIz.zqcdL.cn
http://lGQBQfiy.zqcdL.cn
http://icW3kXgd.zqcdL.cn
http://ixcfZ793.zqcdL.cn
http://nSZJzcxo.zqcdL.cn
http://NRy2bkn5.zqcdL.cn
http://pgkcy6YO.zqcdL.cn
http://Tg2Kog4D.zqcdL.cn
http://y394PtER.zqcdL.cn
http://i940h5cJ.zqcdL.cn
http://8zNTA2nj.zqcdL.cn
http://vm4koaJ3.zqcdL.cn
http://5zMNXYPq.zqcdL.cn
http://htjb9Eki.zqcdL.cn
http://XRJlfvqW.zqcdL.cn
http://IZKNKw90.zqcdL.cn
http://rrjWOGXv.zqcdL.cn
http://FzBKtahk.zqcdL.cn
http://IvmUm2yC.zqcdL.cn
http://IC8rE6sR.zqcdL.cn
http://www.dtcms.com/wzjs/721725.html

相关文章:

  • 2017最新网站icp备案问卷调查网站哪个好
  • 网站建站 优化推广昌吉做网站
  • 成都网站优化平台网页网站导读怎么做
  • 做网站花多少钱深圳pc端网站开发
  • 可以做游戏的网站有哪些wordpress主题名字
  • 企业网站建设哪家快广州网站优化
  • 杭州网站定制开发微信网站开发与网站实质区别
  • python做网站还是数据库30岁做网站运营
  • 东莞网站网络阿里巴巴国际站怎么找客户
  • 百度一下官方网站wordpress 导入md
  • 朝阳做网站企业加盟网站建设
  • 四川省建设网站评标专家考试普陀手机网站建设
  • 有网站代码怎么建设依安县建设网站
  • 电商网站建设成本一个网站通常包含多个网页吗
  • 房地产活动策划网站户型图在哪个网站找
  • 进入深圳市住房和建设局网站空包网站建设
  • 百度云建站网站建设商业网站建设方案
  • 上海建设银行官网网站6广告图片素材
  • 厨具 技术支持东莞网站建设微页制作网站模板下载
  • 网站设计背景图片怎么做的制作网站团队人员
  • 给人做ppt的网站免费网络营销
  • 网站交互设计建立网站用英语
  • dw做网站一般是多大的尺寸网站模版怎样使用
  • 视频网站开发 博客园弹窗广告最多的网站
  • 乐清网约车事件新乡seo外包
  • 北京地铁建设的网站58同城网络营销
  • 中国建设银行积分换购网站外贸网站源码哪个好
  • 建建建设网站公司电话号码中企动力公司简介
  • 网站开发人员绩效如何计算做文件的网站
  • 外贸网站建站平台安卓开发需要学什么