Entity framework core 实体框架核心代码首先不支持哪些SQL Server 2017功能?

Entity framework core 实体框架核心代码首先不支持哪些SQL Server 2017功能?,entity-framework-core,asp.net-core-2.0,sql-server-data-tools,sql-server-2017,Entity Framework Core,Asp.net Core 2.0,Sql Server Data Tools,Sql Server 2017,我们的团队正在考虑首先使用实体框架核心代码来帮助建立数据库模型。我们可以同时拥有DB项目和EF模型,正如本文中使用模式比较的文章所述,只是试图找出真相的来源是什么 实体框架是否支持SQL Server SSDT数据库项目中的所有功能 EF Core 2不支持哪些功能?(例如,它不支持以下任何一项:触发器、视图、函数、存储过程、加密密钥、证书、db属性(ansi null、带引号的标识符)、分区) 我正在尝试查找Microsoft资源。EF Core只是ORM 1) 您应该准备好手动创建除表之外的

我们的团队正在考虑首先使用实体框架核心代码来帮助建立数据库模型。我们可以同时拥有DB项目和EF模型,正如本文中使用模式比较的文章所述,只是试图找出真相的来源是什么

实体框架是否支持SQL Server SSDT数据库项目中的所有功能

EF Core 2不支持哪些功能?(例如,它不支持以下任何一项:触发器、视图、函数、存储过程、加密密钥、证书、db属性(ansi null、带引号的标识符)、分区)

我正在尝试查找Microsoft资源。

EF Core只是ORM

1) 您应该准备好手动创建除表之外的所有DB对象。我手动创建的内容:分析(默认值和条件)。由于这是代码优先-因此不需要SP、函数等。如果您使用ORM-DB,那么它只是一个存储。当然,实践是重要的。对于我来说,默认约束在我手动创建测试数据的表上增加了舒适性。当您不信任您的(团队)代码时,条件也很有用

2) 您将在纯sql中创建(和删除)视图、触发器、sp等到“迁移”代码(EF中有这样的概念):

 migrationBuilder.Sql("CREATE VIEW ...");
因此,您可以有一个单独的“迁移”程序(例如命令行工具),用于安装或删除Ef Core表和手动创建的对象,执行并恢复数据迁移

“EF核心迁移”是一个相当复杂的api(预留一周时间学习)。有趣的主题:在一个db中管理多个DBContext,在从模型注释迁移期间创建db对象,unistall。或者找一个自由职业者(这部分项目适合外包)。

EF核心只是ORM

1) 您应该准备好手动创建除表之外的所有DB对象。我手动创建的内容:分析(默认值和条件)。由于这是代码优先-因此不需要SP、函数等。如果您使用ORM-DB,那么它只是一个存储。当然,实践是重要的。对于我来说,默认约束在我手动创建测试数据的表上增加了舒适性。当您不信任您的(团队)代码时,条件也很有用

2) 您将在纯sql中创建(和删除)视图、触发器、sp等到“迁移”代码(EF中有这样的概念):

 migrationBuilder.Sql("CREATE VIEW ...");
因此,您可以有一个单独的“迁移”程序(例如命令行工具),用于安装或删除Ef Core表和手动创建的对象,执行并恢复数据迁移


“EF核心迁移”是一个相当复杂的api(预留一周时间学习)。有趣的主题:在一个db中管理多个DBContext,在从模型注释迁移期间创建db对象,unistall。或者找一个自由职业者(这部分项目适合外包)。

tl;dr数据库项目功能丰富,但数据库优先。迁移是代码优先的,但内置的数据库功能非常有限

对于许多人来说,比较数据库项目和迁移是不相关的。它们代表了使用实体框架的两种不同模式。迁移是代码优先,DP是数据库优先。当然,您可以使用迁移来控制数据库模式,此外,还可以使DP与生成的数据库保持同步,以满足DBA的需要(如链接所示)。但两人都过着各自的生活,没有任何区别

因此,如果您还不确定要选择哪种工作模式,比较它们是有用的

对我来说,最重要的区别是DP将覆盖所有数据库对象,并在比较数据库时检测它们之间的所有更改。迁移仅检测数据库和映射模型之间的更改。而且生成数据库对象的选项集非常有限。对于您需要的所有额外内容,您必须将SQL语句注入迁移代码中。这些声明是你自己的责任。您必须自己确定迁移是否需要
alterprocedure
语句(例如)。如果脚本和数据库在这方面存在差异,EF不会抱怨

这就是为什么我从来都不是迁移的狂热爱好者的主要原因。实际上不可能维护一个成熟的数据库模式,包括存储、文件组、权限、排序规则等等

DP的另一个优点是,它们与源代码控制的结合非常好。每个数据库对象都有自己的文件,检查每个对象的更改历史非常容易。这在生成的迁移中是不可能的。事实上,许多中间更改可能永远不会影响生成的迁移


当然,迁移的明显优势是可以执行运行时检查(尽管不完整)代码和数据库是否匹配。在database first项目中,您需要为此创建自己的机制;dr数据库项目功能丰富,但数据库优先。迁移是代码优先的,但内置的数据库功能非常有限

对于许多人来说,比较数据库项目和迁移是不相关的。它们代表了使用实体框架的两种不同模式。迁移是代码优先,DP是数据库优先。当然,您可以使用迁移来控制数据库模式,此外,还可以使DP与生成的数据库保持同步,以满足DBA的需要(如链接所示)。但两人都过着各自的生活,没有任何区别

因此,如果您还不确定要选择哪种工作模式,比较它们是有用的

对我来说,最重要的区别是DP将覆盖所有数据库对象,并在比较数据库时检测它们之间的所有更改。迁移仅检测数据库和映射模型之间的更改。以及用于生成