来自数据库项目的脚手架EF核心

时间:2017-09-02 22:14:33

标签: 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到3年了,EF Core是唯一与NETCore兼容的LINQ代码类似的前进道路。因此,开始标题为" 的传奇所以你将会使用EF Core。"

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

Model-First(以前的EF版本中的视觉.edmx设计器)显然不在桌面上,因为MS的解决方案是声称Code-First真的是Model-First,并洗手。因此,一个真正中立的,让我们称之为“契约优先”"为清楚起见,EF Core中不存在方法。

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

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

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

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

帮助?

0 个答案:

没有答案