我有一个.Net Standard 2.0类库项目,我想为它添加实体框架。我已将Entity Framework Core包添加到项目中,但当我尝试向项目添加新项时,不会显示实体框架模板。我在网上看了一下,我似乎找到的就是Code First的说明!
如何恢复数据库的第一个功能?
EF Core不会,也绝不会支持设计人员使用基于EDMX的Database First工作流程。 EF Core将所有对象到数据库映射存储在源代码中的Attributes和Fluent API映射中。
在EF 6中,“Code First”一词意味着两个截然不同的东西。一个是代码优先建模工作流,其中数据库是从.NET类生成的。 “Code First”的另一个含义就是映射元数据嵌入在源代码(Attributes / Fluent API)中,而不是嵌入在EDMX文件中。 EF 6支持两种不同的数据库优先工作流程。数据库优先使用EDMX,工作流正式称为“现有数据库中的代码优先”,但可以将其称为“基于代码的映射的数据库优先”。
在EF Core中,您的代码将始终具有映射,因此在这种意义上它是“代码优先”。但是,您仍然可以执行数据库优先设计工作流,并编写与现有数据库匹配的实体和映射代码。
您可以在程序包管理器控制台中使用scaffold-dbcontext
,或在CLI命令中使用dotnet ef dbcontext scaffold
从现有数据库生成实体类和映射元数据。见Getting Started with EF Core on ASP.NET Core with an Existing Database
在“.net core”中,您无法从菜单中使用EF并“添加新项目”按钮。
确保安装了“Microsoft.VisualStudio.Web.CodeGeneration.Design”包:
Tools –> NuGet Package Manager –> Package Manager Console
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design
然后按照下列步骤操作
Data Source=SQLSERVER;Initial Catalog=DATABASE;persist security info=True;user id=USERNAME;password=PASS
Scaffold-DbContext "CONECTIONSTRING" Microsoft.EntityFrameworkCore.SqlServer -OutputDir FOLDERNAME
Scaffold-DbContext "Data Source=localhost;Initial Catalog=myDb;persist security info=True;user id=sa;password=0000" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/EF
运行上面的代码关于
Tools –> NuGet Package Manager –> Package Manager Console
的更多细节