"Microsoft.EntityFrameworkCore.Design" 包的目的是什么?

57

所有的教程都认为project.json应该包括:

"Microsoft.EntityFrameworkCore.Design": 
{ 
    "type":"build", 
    "version":"1.0.0-preview2-final" 
}

我从未将其包含在内,并且从未出现过问题。

我只包含

"Microsoft.EntityFrameworkCore"
"Microsoft.EntityFrameworkCore.Sqlite"   (or Sqlserver)
"Microsoft.EntityFrameworkCore.Tools"

这个包做什么?为什么我可以毫无问题地排除它?


更新:请查看已接受答案中的评论,以确定在哪种情况下导入哪个包。

1个回答

74

Microsoft.EntityFrameworkCore.Design 包含 Entity Framework Core 的所有设计时逻辑。这是各种工具(如 Add-Migrationdotnet efef.exe)调用的代码。

如果您不使用迁移或反向工程,则不需要它。

当您需要使用它时,我们鼓励使用 PrivateAssets="All",以便它不会被发布到服务器上,在那里您几乎肯定不需要它。


2
我不使用PMC,但我使用CLI工具(dotnet ef foo bar)进行迁移。并没有问题。奇怪!这可能是因为我包含了Microsoft.EntityFrameworkCore.Tools吗? - grokky
8
是的,EFCore.Tools会自动引入EFCore.Design。 - bricelam
3
EFCore.Tools是PMC命令。(以及任何未来的工具,如不需要自己的包,如CLI工具。) - bricelam
29
总结:如果需要使用 PMC 命令,则导入 EFCore.Tools。如果需要使用 CLI 工具,则导入 EFCore.Design。如果需要同时使用两者,则只需导入 EFCore.Tools - grokky
1
@MarkAdamson 传统的方法是将其作为主要EF包的一部分,但我们希望更加模块化,不让那些不使用它的人承担额外的成本。它不是工具的一部分,因为该工具可以针对EF的任何版本进行操作,但设计包仅针对其编译的EF版本进行操作。EF Core Power Tools包括每个版本的副本,以便无需将其安装到项目中即可工作,但这似乎对于CLI工具来说并不可持续。 - bricelam
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接