sha*_*non 6 entity-framework ef-database-first entity-framework-core sql-server-data-project
如何直接从 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
Run Code Online (Sandbox Code Playgroud)
这就是整个问题。以下是我更详细的情况,以便您能够提供替代解决方案:
尽管 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 团队,这对于短期解决方案来说不是一个好兆头)的一次详细对话中指出的。
模型优先(.edmx早期 EF 版本中的视觉设计器)显然是不可能的,因为 MS 对此的解决方案是声称代码优先实际上就是模型优先,并且不再理会它。因此,为清楚起见,我们将其称为“合同优先”的真正中立的方法在 EF Core 中并不存在。
所以,这个咆哮(抱歉,沮丧)让我想到了数据库优先,因此Scaffold-DbContext. 我们的数据库架构目前是一个版本控制的 Visual Studio SQL Server 数据库项目。除了一些已知的问题之外,必须采用我们的数据库模式(目前是我们的单点事实),从中重建实时数据库,然后从实时数据库反向生成代码,这似乎也是荒谬的,所有这些都是如此我们构建过程的一部分只是为了验证数据库类型对齐。我希望能够简单地检测更改并直接从数据库项目重新生成我的 DbContext 和相关实体。
SSDT 数据库项目似乎在许多通常需要数据库连接的 UI 中提供了类似数据库的对象。这让我认为使用数据库模式作为现有工具的来源可能是一个很短的步行路程。例如,在连接字符串中使用元数据提供程序、对 EF Core 代码进行简单修改等。
SQL Sharpener “在设计时使用 SQL 文件作为事实来源(例如在 SSDT 项目中找到的文件)生成”,并被推荐作为EF 早期版本的此问题的解决方案,但它确实不支持 EF Core。
SQLite 和 SQL Server Compact Toolbox刚刚添加了对直接从 .DACPAC 生成 EF 模型的支持,但它似乎依赖于EntityFramework Reverse POCO Code First Generator来实现该功能,该功能在其TODO List上突出地列出了“支持 EF Core” 。该项目的主要贡献者证实了这种不兼容性。
帮助?
我一直在努力解决这个问题,直到我遇到了适用于 Visual Studio 的卓越 EF Core Power Tools 扩展。它的逆向工程工具听起来正是您所需要的。
https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |