什么是Entity Framework Core?
在官方文档上是这么说的:Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。EF Core 可用作对象关系映射程序 (ORM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。
EF主要有一下特点:
1、跨平台
2、建模
3、查询、保存、修改数据
4、使用乐观锁避免我们的数据被其他用户覆盖
5、在查询或保存时自动使用事务管理
6、提供低一级的缓存
7、数据迁移
EF的组件
使用LINQ语句将面向对象的方式转化为sqlstatement,语句返回的是一个个实体对象Entity SQL能够执行原生的SQL的语句,通过LINQ和Entity SQL我们可以将对象提供给Object Service,它是访问数据库和返回数据的主要入口,负责数据的实例化,并将其传入下一层Data Privider。接下来Data Privider把LINQ和Entity SQL语言转化为真正的SQL语言,之后将通过ADO.Net数据库通讯从数据库中发送或索取数据。
添加Entity Framework Core步骤:
1、创建和配置数据库的上下关系对象:DatabaseContext连接数据库,映射数据模型,类似于代理服务器和路由器,是一个代码与数据库的连接器,在类中指定需要操作的数据模型。
public class AppDbContext:DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Noodle> Noodles { get; set; }
public DbSet<Feedback> Feedbacks { get; set; }
}
DbContext必须具有DbContextOptions的实例才能执行后续工作。DbContextOptions 实例携带如下配置信息:
-
要使用的数据库提供程序,通常通过调用方法(如 UseSqlServer 或 UseSqlite)进行选择。这些扩展方法需要相应的提供程序包,如 Microsoft.EntityFrameworkCore.SqlServer 或
Microsoft.EntityFrameworkCore.Sqlite。 方法在
Microsoft.EntityFrameworkCore 命名空间中定义。 -
任何必需的数据库实例的连接字符串或标识符,通常作为参数传递给上面提到的提供者选择方法
-
任何提供程序级别的可选行为选择器,通常还链接到对提供程序选择方法的调用中
-
任何常规 EF Core 行为选择器,通常在提供程序选择器方法之后或之前链接
2、在构造函数中可以直接继承DbContextOptions:
public ApDbContext(DbContextOptions options) : base(options) { }
3、在startup.cs中引入相关包。并且在ConfigureServices方法中注入该对象:services.AddDbContext(options=> => options.UseSqlServer(“connectionstring”));//connectionstring为之后要传入的数据库
4、在解决方案资源管理器中右击项目添加,新建项,在搜索框中输入appsetting进行添加。在appsettings.json文件中显示了数据库的默认配置信息,将数据库修改为LanzhouNoodleDb3、在startup中添加配置文件的构造函数并且修改AddDbContext函数。 public IConfiguration Configuration { get; } //由于只需要读取,因此只要get
public Startup(IConfiguration configuration) { Configuration = configuration;
}
...
services.AddDbContext<AppDbContext>(options=> options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
5、将假数据替换为真数据。新建文件NoodleRepository.cs类文件:
public class NoodleRepository : INoodleRepository
{
private readonly AppDbContext _context;
public NoodleRepository(AppDbContext appDbContext)
{
_context = appDbContext;
}
public IEnumerable<Noodle> GetAllNoodles()
{
return _context.Noodles;
}
public Noodle GetNoodleById(int Id)
{
return _context.Noodles.FirstOrDefault(n => n.Id==Id);
}
}
之后将startup.cs中的MockNoodleRepository改为真正的面条仓库NoodleRepository;同理Feedback也是如此。