entity-framework - 来自数据库项目的脚手架 EF Core

标签 entity-framework entity-framework-core ef-database-first 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

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

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

这部分是自以为是,但对我来说(基于 25 年以上的企业软件设计和开发经验)Code-First 绝对不是初学者。对于小型的第一周应用程序概念来说很好,但是我没有看到可以集成约束、 View 等的合理模式/过程/实践。到处都是用静态字段来支持 LINQ-to-SQL 查询的代码,使用 LinqKit 混淆微组合模式等。 没有限制,我们最终需要十倍的防御性代码要求来处理运行时错误,快速开花的单元和集成测试,演示失败成为常态。要么我们的面向对象专家需要成为 SQL 专家,要么反过来,我们大大增加了寻找和适当补偿工程师的难度。所有这些问题都是我在四年前与 Rowan Miller(他最近离开 EF 团队,这对近期解决方案不是好兆头)的详细对话中指出的。

Model-First(早期 EF 版本中的可视化 .edmx 设计师)显然不在讨论范围内,因为 MS 对此的解决方案是声称 Code-First 确实是 Model-First,并洗手。因此,EF Core 中不存在真正中立的方法,为了清楚起见,我们称其为“契约(Contract)优先”。

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

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

SQL Sharpener “在设计时使用 SQL 文件作为真实来源(例如在 SSDT 项目中找到的那些)生成 [s],并且是 recommended 作为 solution 对于以前版本的 EF 这个问题,但是它不支持 EF Core。

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

帮助?

最佳答案

在遇到适用于 Visual Studio 的 sublime EF Core Power Tools 扩展之前,我一直在为此苦苦挣扎。它的逆向工程工具听起来正是您所需要的。
https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools

关于entity-framework - 来自数据库项目的脚手架 EF Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018679/

相关文章:

c# - 测试时尝试将 C# 代码与底层数据库隔离可以得到什么好处?

c# - 尽管 State=Modified,为什么 EF Core 只生成父(游戏)属性更新?

c# - 无法使用现有数据库运行 EF5 迁移

c# - 选中复选框时 ASP.NET MVC 更改数据库值

c# - EF 上下文中基于动态角色的身份验证过滤器

c# - 我的 ViewModel 导致了多个错误

c# - 使用同一个数据库为多个 DbContext 创建表

c# - "Build failed"on Database First Scaffold-DbContext

c# - 如何以一种形式发布两个或多个模型?

sql-server - 使用具有复合键和更新级联功能的 SQL Server 数据库进行 ASP.NET MVC 编码