SQL Entity Framework 服务器

SQL Server for Entity Framework

当我的项目中有 EntityFramework 核心时,是否必须安装 SQL 服务器才能使用数据库?还是 EntityFramework Core 涵盖了我对数据库相关问题的所有需求?

EntityFramework 核心是数据库的orm

如果您使用 EntityFramework,您必须有 sql 服务器来创建数据库,并且您必须迁移 EF 并更新数据库

但是如果你不能安装sql你可以使用docker

参考:


https://docs.microsoft.com/en-us/ef/core/


https://www.docker.com/

Do I have to install SQL Server to be able to work with a database while I have EntityFramework Core in my project?

没有。 Entity Framework 是一种在 C# LINQ 语句和各种风格的 SQL 之间进行调整的设备,以便下载数据库数据并将其转换为可在 C# 中使用的对象树。

所需的特定 SQL 由特定于数据库的提供程序库处理,并且有许多不同的提供程序。这使 EF 能够使用各种不同的数据库。您确实需要 一个数据库 但它不一定是 SQL 服务器。一个流行的替代方案是 SQLite,这是一个基于文件的数据库,不需要安装独立的服务器软件;它的功能非常强大,其功能集可与 SQLServer、MySQL、Oracle 和 Postgres

等企业级数据库相媲美

因为您似乎想使用 EF 而不必使用 SQLServer,这里有一个 link 到使用 SQLite 的 Microsoft EFC 教程:

https://docs.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=netcore-cli

随意使用任何有 EF 提供程序的数据库;教程 linked 对各种提供者都有 link 关闭,简单的网络搜索无疑也会带来一个很大的列表,所以我不会在这里复制它

Or does EntityFramework Core cover every need I would have for a database related matter?

如前所述,EFC 纯粹是一种设备,可以看到您使用 LINQ,生成 SQL,获取数据并为您提供一个对象。它是您的代码和数据库之间的适配器作为高级概述,您可能有表:

Department
DepartmentId, DeptName

Employee
EmployeeId, Name, HireDate, DepartmentId

您将有 类 代表他们:

public class Employee {
  public int Id {get; set;}
  public string Name {get; set;}
  public DateTime {get; set;}

  public int DepartmentId {get; set;}
  public Department Department {get; set;}
}

public class Department {
  public int DepartmentId {get; set;}
  public string DeptName {get; set;}

  public ICollection<Employee> Employees {get; set;}
}

您将形成一个 LINQ 以某种方式检索它们:

context.Employees.Include(e => e.Department).First(e => e.EmployeeId == 1);

EF 会生成一个 SQL(像这样,可读性不强)和 运行 它:

SELECT TOP 1 * 
FROM Employees e INNER JOIN Departments d ON e.DepartmentId = d.DeparmtentId 
WHERE e.EmployeeId == 1

数据库会返回一些结果集:

1, John, 1970-01-01, 2, 2, Engineering

EF 将提取数据部分并将其存储到对象中:

Employee e = new Employee();
e.Id = datareader.GetInt("EmployeeId"); //1
e.Name = datareader.GetString("Name"); //John
e.HireDate = datareader.GetDate("HireDate");  //1970-01-01
e.DepartmentId = datareader.GetInt("DepartmentId"); //2

Department d = new Department();
d.Id = datareader.GetInt("DepartmentId"); //2
d.DeptName = datareader.GetString("DeptName"); //Engineering

e.Department = d;
d.Employees.Add(e);

你会得到一个 C# 对象,它的所有字段都被填充,包括一个相关部门,它的所有字段都被填充,所以你可以说,例如emp.Department.Name(甚至 emp.Department.First()。Employee.Department.First()。员工...- it's a 2-way linked graph so you can do lots of“点点点”在它周围导航。

所以,当你想到它时,EF 正在为你做大量无聊的工作;制作 SQL、读取数据库、制作对象.. 全部都在一行 C# 的后面,上面写着“我想要 ID 为 1 的员工及其部门”

但是它不包括数据库本身因为不同的人需要不同的数据库是有充分理由的