1. EF概述
Entity Framework (EF)是Microsoft公司推出的一种数据访问技术,能够将应用程序与各种数据源(如数据库)进行连接,使得开发人员可以用对象方式来处理数据。EF是面向对象的,因此能够帮助开发人员从关系型数据库中获得更好的抽象和封装,提高应用程序的可扩展性和易维护性。
2. EF支持的数据库
2.1 MSSQL数据库
EF最初只支持Microsoft SQL Server(MSSQL)数据库,随着版本的更新,EF逐渐支持多种不同的数据库。
EF针对MSSQL数据库提供的构建器包括:ConnectionString、Model、Database、Entity、ObjectContext等,这些构建器各自承担着不同的职责。
MSSQL数据库在EF中的使用类似于以下代码:
using System.Data.Entity;
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=MyDb;Integrated Security=True");
}
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
这段代码创建了一个名为“MyContext”的DbContext类,并在其中包含了一个DbSet<Customer>属性(用于定义Customer实体的数据库集合)。DbContext类需要在OnConfiguring方法中使用UseSqlServer方法来配置连接字符串,从而让应用程序连接到MSSQL数据库中。
2.2 其他数据库
除了MSSQL数据库之外,EF还支持多种其他的数据库,包括MySQL、Oracle、PostgreSQL等。
在使用其他数据库时,需要使用连接还原程序、驱动程序或类似的组件来连接到数据库。同时,需要使用相应的DbContext,例如:
using Microsoft.EntityFrameworkCore;
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("server=localhost;database=mydb;user=root;password=mypwd");
}
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
这段代码将MySql作为DbContext的后端,DbContext将使用UseMySql方法来配置连接字符串,从而让应用程序连接到MySql数据库中。
3. EF与MSSQL数据库的集成
3.1 EF6与MSSQL数据库
EF6是最早支持MSSQL数据库的EF版本。
在EF6中,可以使用DbSet<T>类作为DbContext中的属性来定义实体集合。
以下是一个使用EF6连接到MSSQL数据库的示例:
using System.Data.Entity;
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().ToTable("Customers");
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
这段代码创建了一个名为“MyContext”的DbContext类,并在其中添加了一个DbSet<Customer>属性。DbContext类需要在OnModelCreating方法中定义表映射,将Customer实体映射到名为“Customers”的MSSQL数据库表中。
3.2 EF Core与MSSQL数据库
EF Core是.NET Core平台上的新一代ORM,可用于连接多种类型的数据库,包括MSSQL数据库。
以下是一个使用EF Core连接到MSSQL数据库的示例:
using Microsoft.EntityFrameworkCore;
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().ToTable("Customers");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDb;Trusted_Connection=True;");
}
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
这段代码创建了一个名为“MyContext”的DbContext类,并在其中添加了一个DbSet<Customer>属性。DbContext类需要在OnModelCreating方法中定义表映射,将Customer实体映射到名为“Customers”的MSSQL数据库表中。DbContext类还需要在OnConfiguring方法中连接到MSSQL数据库,并指定连接字符串。
4. EF的优势
EF将数据库操作转化为了对象操作,使得开发人员可以通过直接操作对象来完成对数据库的操作。因此,EF的优势在于:
抽象数据访问细节:EF将数据访问操作细节封装在框架内部,使得开发人员可以专注于业务逻辑和对象模型的开发。
增强了代码可读性:通过使用EF,可以将数据操作逻辑与业务逻辑分离,使得代码更容易阅读。
提高了代码的可维护性:使用对象而非SQL语言来操作数据库,易于扩展和维护。