五、C#与数据库交互( Entity Framework ORM框架)

在C#中与数据库交互,Entity Framework ORM(对象关系映射)框架是一个常用的选择。Entity Framework 是一个微软的开源框架,它使得.NET 开发人员能够以面向对象的方式使用数据,而不是直接编写SQL。通过使用Entity Framework,你可以用.NET对象来操作数据库,同时仍然可以利用关系型数据库的优点。

以下是一个简单的示例,展示如何使用Entity Framework来与数据库交互:

  1. 设置EF环境:
    首先,你需要安装Entity Framework的NuGet包。可以通过NuGet包管理器来安装,或者在项目文件中直接添加依赖。

  2. 定义实体类:
    假设我们有一个Student实体类,它有Id, Name, 和 Age属性。

    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
  3. 配置DbContext:
    创建一个继承自DbContext的类,并配置数据库上下文和实体的映射关系。

    using Microsoft.EntityFrameworkCore;
    
    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 配置数据库连接字符串,这里以SQL Server为例
            optionsBuilder.UseSqlServer("your-connection-string-here");
        }
        
        // 如果你使用的是EF6而不是EF Core,请使用下面的Fluent API方式来配置实体映射
        // protected override void OnModelCreating(ModelBuilder modelBuilder)
        // {
        //    modelBuilder.Entity<Student>(ConfigureStudent);
        // }
        // private void ConfigureStudent(EntityTypeBuilder<Student> student)
        // {
        //    student.ToTable("Students"); // 表名映射
        //    student.HasKey(s => s.Id); // 主键配置等其他映射设置...
        // }
    }
    
  4. 查询数据库:
    使用EF的查询方法从数据库中获取数据。

    using(var context = new SchoolContext())
    {
        var students = context.Students.ToList(); // 获取所有学生数据
        
        var studentByName = context.Students.FirstOrDefault(s => s.Name == "John"); // 根据名字查找学生
        
        if(studentByName != null)
        {
            // 更新学生信息并保存到数据库中
            studentByName.Age += 1; // 假设年龄增加一岁
            context.Entry(studentByName).State = EntityState.Modified; // 设置实体为已修改状态,准备更新到数据库中
            context.SaveChanges(); // 提交更改到数据库中保存。如果不想立即保存,可以调用context.Database.Log查看SQL语句。
        }
    }
    

    在上述代码中,我们创建了一个SchoolContext实例,并通过它与数据库交互。通过DbSet属性来访问实体的集合,然后使用EF的方法来执行CRUD操作。ToList()方法用于获取所有数据,FirstOrDefault()用于获取符合条件的单个实体。在更新数据后,我们通过设置实体状态为Modified并调用SaveChanges()方法将更改保存到数据库中。 也可以使用context.Database.Log来查看生成的SQL语句。

除了上述基本操作外,Entity Framework还提供了许多高级功能,如LINQ查询、延迟加载、导航属性、事务处理等。

  1. LINQ查询:
    使用LINQ (Language Integrated Query) 可以很方便地对实体集合进行查询。

    var studentsOlderThan20 = context.Students.Where(s => s.Age > 20).ToList();
    
  2. 延迟加载:
    当你在查询一个实体时,它的导航属性默认不会加载。如果你想在访问这些属性时让EF自动加载它们,可以使用延迟加载。

    var student = context.Students.Include(s => s.NavigationProperty).FirstOrDefault(s => s.Id == someId);
    
  3. 导航属性:
    你可以在实体类中定义导航属性来代表与其他实体的关系。比如一个学生可以有多个课程(Courses),可以通过Course导航属性来访问。

    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        
        public ICollection<Course> Courses { get; set; }
    }
    
  4. 事务处理:
    在进行多个数据库操作时,可以使用事务来确保数据的一致性。

    using(var context = new SchoolContext())
    {
        using(var transaction = context.Database.BeginTransaction())
        {
            try
            {
                // 执行数据库操作...
                context.SaveChanges(); // 提交事务,如果成功则更改保存到数据库中,否则回滚。
                transaction.Commit(); // 提交事务。如果前面的操作成功,则此操作不会抛出异常。
            }
            catch(Exception)
            {
                // 异常处理,比如回滚事务...
                transaction.Rollback(); // 回滚事务。撤销在事务中所做的更改。
            }
        }
    }
    
  5. Entity Framework Core:

    • Entity Framework Core 是Entity Framework的下一代版本,它支持跨平台,并且对性能进行了优化。如果你正在开发一个ASP.NET Core应用,你可能会更倾向于使用Entity Framework Core。两者在概念上非常相似,但在使用上有一些差异。例如,Entity Framework Core使用DbContext派生类和DbSet<T>属性来定义数据上下文和数据库集合并提供数据访问,这与Entity Framework相同。但EF Core还引入了功能,如代码优先开发和数据库迁移等。如果你正在开发一个需要跨平台支持的应用程序,或者你正在寻找一个更现代、更灵活的ORM解决方案,EF Core可能是一个不错的选择。
  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C#中操作数据库主要有以下几种方式: 1. ADO.NET:是一种面向关系型数据库的数据访问技术,可以通过.NET Framework提供的API来与数据库进行交互。 2. Entity Framework:是一种ORM(Object-Relational Mapping)框架,可以将对象映射到数据库中的表,通过对对象进行操作来完成对数据库的操作。 3. LINQ to SQL:是一种将SQL语句转化为LINQ查询的技术,通过对对象集合进行操作来完成对数据库的操作。 下面以ADO.NET为例,介绍一下在C#中如何操作数据库: 1. 连接数据库 ``` using System.Data.SqlClient; //... string connStr = "Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx"; //连接字符串 SqlConnection conn = new SqlConnection(connStr); //创建SqlConnection对象 conn.Open(); //打开连接 ``` 2. 执行SQL语句 ``` string sql = "SELECT * FROM xxx WHERE xxx"; //SQL语句 SqlCommand cmd = new SqlCommand(sql, conn); //创建SqlCommand对象 SqlDataReader reader = cmd.ExecuteReader(); //执行查询,并返回SqlDataReader对象 while (reader.Read()) { //遍历查询结果 } reader.Close(); //关闭SqlDataReader对象 ``` 3. 插入、更新、删除数据 ``` string sql = "INSERT INTO xxx (xxx) VALUES (xxx)"; //插入数据的SQL语句 SqlCommand cmd = new SqlCommand(sql, conn); //创建SqlCommand对象 int rows = cmd.ExecuteNonQuery(); //执行插入操作,并返回受影响的行数 ``` 4. 关闭连接 ``` conn.Close(); //关闭连接 ``` 以上是C#中使用ADO.NET操作数据库的基本方法,根据实际情况可以进行相应的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈嗨哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值