关于EF的Code First的使用以及踩坑记录

  • Post category:C#

以下是关于EF的CodeFirst的使用以及踩坑记录的完整攻略:

1. 什么是EF的CodeFirst

Entity Framework (EF) 是一个对象关系映射 (ORM) 框架,它允许开发人员使用.NET语言来访问数据库。Code First是EF的一种开发模式,它允许开发人员使用.NET语言来定义实体类,然后通过这些实体类来创建数据库表。

2. 如何使用EF的CodeFirst

使用EF的CodeFirst,我们需要按照以下步骤操作:

2.1. 步骤1:创建实体类

首先,我们需要创建实体类,这些实体类将映射到数据库表。例如,我们可以创建一个名为Student的实体类:

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

2.2. 步骤2:创建DbContext

接下来,我们需要创建一个继承自DbContext的类,这个类将用于管理实体类和数据库之间的映射关系。例如,我们可以创建一个名为SchoolContext的类:

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

在上面的代码中,我们使用DbSet属性来定义实体集合,这个属性将映射到数据库表。

2.3. 步骤3:配置数据库连接

接下来,我们需要配置数据库连接。我们可以在appsettings.json文件中添加以下配置:

{
  "ConnectionStrings": {
    "SchoolContext": "Server=(localdb)\\mssqllocaldb;Database=School;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

在上面的配置中,我们使用Server属性指定数据库服务器,使用Database属性指定数据库名称,使用Trusted_Connection属性指定使用Windows身份验证,使用MultipleActiveResultSets属性指定允许多个活动结果集。

2.4. 步骤4:启用CodeFirst

最后,我们需要在应用程序启动时启用CodeFirst。我们可以在Startup.cs文件中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<SchoolContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("SchoolContext")));
}

在上面的代码中,我们使用AddDbContext方法将SchoolContext类添加到依赖注入容器中,并使用UseSqlServer方法指定使用SQL Server数据库。

2.5. 示例1:添加数据

在上面的步骤完成后,我们可以使用以下代码向数据库中添加数据:

using (var context = new SchoolContext())
{
    var student = new Student { Name = "Tom", Age = 18 };
    context.Students.Add(student);
    context.SaveChanges();
}

在上面的代码中,我们使用SchoolContext类创建一个上下文对象,使用Students属性获取实体集合,使用Add方法添加实体对象,使用SaveChanges方法将实体对象保存到数据库中。

2.6. 示例2:查询数据

我们可以使用以下代码从数据库中查询数据:

using (var context = new SchoolContext())
{
    var students = context.Students.ToList();
    foreach (var student in students)
    {
        Console.WriteLine($"Id: {student.Id}, Name: {student.Name}, Age: {student.Age}");
    }
}

在上面的代码中,我们使用Students属性获取实体集合使用ToList方法将实体集合转换为列表,使用foreach循环遍历列表,并输出每个实体对象的属性值。

3. 踩坑记录

在使用EF的CodeFirst时,我们可能会遇到以下问题:

3.1. 数据库迁移失败

在使用EF的CodeFirst时,我们可能会遇到数据库迁移失败的问题。这可能是由于数据库模型与数据库架构不匹配导致的。我们可以使用以下命令来解决这个问题:

dotnet ef database update --force

在上面的命令中,我们使用--force选项来强制更新数据库。

3.2. 数据库连接失败

在使用的CodeFirst时,我们可能会遇到数据库连接失败的问题。这可能是由于数据库服务器名称或数据库名称不正确导致的。我们可以使用以下命令来解决这个问题:

dotnet ef database update --connection "Server=(localdb)\mssqllocaldb;Database=School;Trusted_Connection=True;MultipleActiveResultSets=true"

在上面的命令中,我们使用--connection选项来指定数据库连接字符串。

4. 结论

通过以上步骤,我们可以使用EF的CodeFirst来创建实体类和数据库表之间的映射关系,并使用DbContext类来管理这些映射关系。我们可以使用AddDbContext方法将DbContext类添加到依赖注入容器中,并使用UseSqlServer方法指定使用SQL Server数据库。我们可以使用Add方法将实体对象添加到实体集合中,并使用SaveChanges方法将实体对象保存到数据库中。我们可以使用ToList方法从数据库中查询数据,并使用foreach循环遍历列表。在使用EF的CodeFirst时,我们可能会遇到数据库迁移失败或数据库连接失败的问题,我们可以使用dotnet ef database update命令来解决这些问题。