当前位置:  开发笔记 > 编程语言 > 正文

实体框架核心从现有数据库创建模型

如何解决《实体框架核心从现有数据库创建模型》经验,为你挑选了3个好方法。

使用Entity Framework Core,您如何生成EF模型和实体?

根据ASP.NET核心 - 现有数据库 Microsoft文章,您需要在程序包管理器控制台中运行如下命令:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

这使您无法控制要导入的表或视图.是否有可能这是现在使用EF Core对数据库进行逆向工程并创建EF模型和实体的唯一方法,与现在使用完整实体框架的方式相比,这种进展有何进展?



1> 小智..:

我知道这个问题有点陈旧,但我认为这对于遇到同样问题的人来说非常有用.

如果我已正确理解您的问题,您需要指定应生成哪些表.如果将-Tables参数添加到命令,应该可以.

这是我用来生成3个数据库表的命令(在包管理器控制台中):

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;"  
     -Provider Microsoft.EntityFrameworkCore.SqlServer 
     -OutputDir Models -Context NorthwndContext 
     -Tables Products,Categories,Suppliers -Force

如您所见,我使用Northwnd-Database并仅生成"产品,类别和供应商"表.显然,您可以添加更多表,只需用逗号分隔即可.

如果您不知道,可以通过转到数据连接(服务器资源管理器),单击要添加的数据库并在右侧(属性)获取DatabaseName,您会看到一个属性(名称).对我来说这是"NORTHWND.MDF".

我曾经-Force覆盖我已经创建的任何模型.

您可以使用-DataAnnotations获取带注释的模型.否则,您将获得Fluent模型配置.

PS:我只尝试过使用ASP.NET Core 2和Entity Framework Core 2.0.0.


谢谢,我认为从功能齐全的edmx用户界面开始,它可以让您查看和编辑表格,关系,字段等等一些命令行工具,并将其视为地面制动进度,这是荒谬的...
我不知道MS最近有什么破解.Core解决了在非IIS服务器上运行.Net的问题...... 1%运行MS的IT商店存在问题,如果这个想法能够满足对Windows服务器的需求,那么......作为商业计划,我不会得到它.

2> 小智..:

在Entity Framework Core中没有办法做到这一点.阅读此处的文档:https: //docs.microsoft.com/en-us/ef/efcore-and-ef6/features


实际上你可以控制导入的表,看看Scaffold-dbContext文档:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell你有-Tables参数在哪里指定要导入的所有表,这是一个例子:https://github.com/aspnet/EntityFramework/wiki/Design-Meeting-Notes-(October-1,-2015)#table-selection-in-逆向工程
哇,还有很多遗漏...那么为什么有人要使用这个残缺不全的称为EF Core的ORM?跨平台使用EF Core是唯一的优势/诱因吗?
@Bouam完成此操作后,您仍然获得edmx UI,可以在其中查看和编辑数据库对象和字段以及查看表之间的关系吗?

3> BautaBear..:

我的情况是我有一个带有DbContexts的.net 4.5+类库.

这些DbContexts是使用"现有数据库中的代码优先"向导从现有数据库创建的.EF Core似乎缺少此向导.

要从与EF Core兼容的现有数据库创建新的Code First DbContext,我在这里松散地遵循了指南

我的步骤:

创建了一个新的核心类库

添加了nuget包Microsoft.EntityFrameworkCore

添加了nuget包Microsoft.EntityFrameworkCore.Tools

添加了nuget包Microsoft.EntityFrameworkCore.SqlServer

添加了nuget包Microsoft.EntityFrameworkCore.SqlServer.Design

打开nuget Package Manager控制台

输入命令

Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"

作为提供者进入

Microsoft.EntityFrameworkCore.SqlServer

请注意,使用非Core项目时,您可能会遇到nuget Package Manager控制台的问题.我通过创建一个新的Core类库而不是.net文件库来避免这个问题.

创建上下文后,您可以像在Code First中一样编辑它,例如,您可以删除不想使用的表.


+1用于**创建新的核心类库,而不是.net一个。** .Net 4.x项目在Microsoft.EntityFrameworkCore.Design上抛出FileNotFoundException。
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有