Entity Framework 数据库优先 .Net Core

10
我有一个 .Net Standard 2.0 类库项目,想要添加 Entity Framework。我已经将 Entity Framework Core 包添加到该项目中,但是当我尝试添加新项时,没有 Entity Framework 模板出现。我在网上搜索了一下,似乎只有 Code First 的说明!如何恢复数据库优先功能?
3个回答

15

EF Core不支持基于EDMX的设计器实现的“数据库优先”流程,且永远不会支持。在EF Core中,所有对象到数据库映射都存储在源代码中的属性和Fluent API映射中。

在EF 6中,“Code First”一词有两个非常不同的含义。一个是从.NET类生成数据库的代码优先建模工作流。另一个含义是将映射元数据嵌入源代码(属性/Fluent API)而不是EDMX文件。EF 6支持两种不同的“数据库优先”工作流。使用EDMX进行数据库优先和官方称为“Code First From an Existing Database”的工作流,但可能被称为“使用基于代码的映射的数据库优先”。

在EF Core中,您的代码始终具有映射,因此从这个意义上说,它是“代码优先”的。但是,您仍然可以使用“数据库优先”设计工作流程,并编写与现有数据库匹配的实体和映射代码。

您可以使用Package Manager Console中的scaffold-dbcontext或CLI命令中的dotnet ef dbcontext scaffold从现有数据库生成实体类和映射元数据。请参见使用现有数据库在ASP.NET Core上开始使用EF Core


谢谢,这澄清了事情。我尝试通过在单独的项目中添加基于EDMX的ORM来克服这个(Core EDMX)冲突(之前已经做过这个)。然而,我的Core Web项目不接受它作为依赖项,“无法解析依赖项“EF_Project””。这仍然是因为框架冲突而导致的无法解决的问题吗? - DaniDev
如果你正在使用EDMX,那么你正在使用EF6,而不是EF Core。因此,你的项目必须使用.NET Framework,而不是.NET Core。 - David Browne - Microsoft
我正在使用VS2015,我的主要(或启动)项目是一个ASP.CORE Web应用程序,使用.NET Framework(而不是.NET Core)。 - DaniDev
2
谢谢你的回答。它解决了一些问题。然而,强制人们使用CLI是荒谬的,似乎是一个重大的倒退。 - coolblue2000
1
终于有了一个简明扼要的解释,关于Entity Framework的理论和意图。在没有任何关于这方面背景知识的情况下,从零开始构建一个新的EF项目往往令人困惑,而且需要阅读的材料很多,可能会让人感到压力山大... - undefined
显示剩余2条评论

1
在“.net core”中,您不能从菜单和“添加新项”按钮使用EF。
确保已安装“Microsoft.EntityFrameworkCore.Tools”软件包:
1. 转到“工具 - > NuGet程序包管理器 - > 包管理器控制台” 2. 运行“Install-Package Microsoft.EntityFrameworkCore.Tools”
然后按照以下步骤操作:
  1. 按照示例代码创建连接字符串。 (SQLSERVER,DATABASE,USERNAME,PASS)

    Data Source=SQLSERVER;Initial Catalog=DATABASE;persist security info=True;user id=USERNAME;password=PASS

  2. 编辑示例代码并将上述代码放入引号中。 (CONECTIONSTRING,FOLDERNAME)

    Scaffold-DbContext "CONECTIONSTRING" Microsoft.EntityFrameworkCore.SqlServer -OutputDir FOLDERNAME

  3. 例如,这是步骤1和2的结果。

    Scaffold-DbContext "Data Source=localhost;Initial Catalog=myDb;persist security info=True;user id=sa;password=0000" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/EF

  4. 通过 工具 –> NuGet程序包管理器 –> 包管理器控制台 运行上述代码。

关于 如何使用现有数据库在 ASP.NET Core 上开始使用 EF Core 的更多详细信息。


2
多么糟糕的想法!“.NET Core- 为了防止你的服务器没有Windows而将功能设置退回20年!” - SteveCav
1
@SteveCav 这正是我的想法。为什么在使用 GUI 与 EF 进行交互多年后,我现在被迫记住冗长的 CLI 命令?这真的很荒谬。不仅如此,将 EF 添加到一个项目中需要一次下穿兔子洞的旅程,因为它不断抱怨依赖项存在冲突,所以我必须逐个安装每个依赖项。30-40 个依赖项后,我终于成功安装了它!我感觉未来的项目会回到 .net 4。 - coolblue2000
可能是由于dotNet Core结构的简单性和优化,无法通过GUI执行操作。 但我们应该看看微软在Visual Studio 2019和dotNet Core 3中将如何处理此过程。 - M.R.T

0
您还可以反向工程您的数据库模式,根据文档的解释,这意味着:
引用: 这是基于数据库模式搭建实体类型类和DbContext类的过程。 使用EF Core包管理器控制台(PMC)工具的Scaffold-DbContext命令或.NET命令行界面(CLI)工具的dotnet ef dbcontext scaffold 命令可以执行此操作。
然后,如果您已经有一个现有的数据库,您只需要使用您的连接字符串和实际提供程序的NuGet软件包名称来执行命令。 例如,对于postgresql数据库,您将需要下面的命令:
dotnet-ef dbcontext scaffold "Host=localhost;Username=my_user_name;Password=my_pswd;Database=my_db" Npgsql.EntityFrameworkCore.PostgreSQL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接