4

如何直接从 Visual Studio SQL Server 数据库项目构建 EF Core?

首选以下解决方案:

scaffold-dbcontext -connection "provider=ssdtproject, name=myprojectname.sqlproj"
scaffold-dbcontext -ddl "ssdtprojectoutput.sql"
scaffold-dbcontext -ssdtschema "ssdtproject.dacpac"
maintained-third-party-tool myprojectname.sqlproj -EfModelGenerationParameters

这就是整个问题。以下是我更详细的情况,以便您可以提供替代解决方案:

尽管 MS 承认 EF Core 仍未准备好生产,但距离 EF 6 进展停止现在也有 3-4 年,而 EF Core 是唯一与 NETCore 兼容的 LINQ 代码类似路径。于是开始了标题为“所以你将使用 EF Core ”的传奇。

这部分是固执己见的,但对我来说(基于 25 年以上的企业软件设计和开发经验)Code-First 绝对不是初学者。对于小型的第一周应用程序概念来说这很好,但是我看不到可以集成约束、视图等的合理模式/流程/实践。如果没有内置视图,真正的业务应用程序最终会导致开发人员在 LINQ 表达式中重复逻辑基础到处都是,用静态字段乱扔代码以支持 LINQ-to-SQL 查询,使用 LinqKit 混淆微组合模式等。在没有约束的情况下,我们最终需要十倍的防御性代码来处理运行时错误,迅速开花的单元和集成测试,演示失败成为常态。要么我们的面向对象专家需要成为 SQL 专家,要么相反,我们大大增加了寻找和适当补偿工程师的难度。所有这些问题我在四年前与 Rowan Miller(他最近离开了 EF 团队,这对于短期解决方案来说并不是一个好兆头)进行了详细的交谈中指出。

Model-First(.edmx早期 EF 版本中的可视化设计器)显然不在讨论范围内,因为 MS 对此的解决方案是声称 Code-First 确实是 Model-First,然后洗掉他们的手。因此,EF Core 中不存在真正中立的方法,我们称其为“合同优先”。

所以,那次咆哮(对不起,沮丧)把我带到了 Database-First,因此Scaffold-DbContext. 我们的数据库架构目前是一个受修订控制的 Visual Studio SQL Server 数据库项目。除了一些已知的问题之外,必须采用我们的数据库模式(目前是我们的单点真相),从中重建一个实时数据库,然后从实时数据库反向生成代码,这似乎也很荒谬,所有这些都是我们构建过程的一部分只是为了验证数据库类型对齐。相反,我希望能够简单地检测更改并直接从数据库项目重新生成我的 DbContext 和相关实体。

SSDT 数据库项目似乎使类似数据库的对象在许多通常需要数据库连接的 UI 中可用。这让我认为使用数据库模式作为现有工具的来源可能很容易。例如,在连接字符串中使用元数据提供程序,对 EF Core 代码进行简单修改等。

SQL Sharpener “在设计时使用 SQL 文件作为事实源(例如在 SSDT 项目中发现的那些)生成[s]”,并被推荐作为以前版本 EF 的此问题的解决方案,但它确实不支持 EF Core。

SQLite 和 SQL Server Compact Toolbox刚刚添加了对直接从 .DACPAC 生成 EF 模型的支持,但它似乎依赖于EntityFramework Reverse POCO Code First Generator来实现该功能,该功能在其TODO List中突出显示“支持 EF Core” 。该项目的主要贡献者证实了这种不兼容性。

帮助?

4

1 回答 1

0

在遇到 Visual Studio 的崇高 EF Core Power Tools 扩展之前,我一直在苦苦挣扎。它的逆向工程工具听起来就像您需要的一样。

https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools

于 2021-09-29T04:49:00.557 回答