为什么向csproj添加模型实体框架失败?

时间:2018-02-21 20:55:40

标签: entity-framework-6 csproj

这是我的项目文件csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
     <TargetFramework>net4.6</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
     <PackageReference Include="EntityFramework" Version="6.2.0" />
  </ItemGroup>
</Project>

在VisualStudio 2017中,我尝试添加项目“ ADO.NET实体数据模型”。当按下添加按钮VS给我一个例外......

Exception

在日志文件中我得到了这个:

  

=====================   2018-02-21 15:23:47   可采   System.Reflection.TargetInvocationException:调用目标引发了异常。 ---&GT; Microsoft.VisualStudio.ProjectSystem.ProjectException:   此项目项提供程序不支持项类型“EntityDeploy”。      在Microsoft.VisualStudio.ProjectSystem.ProjectErrorUtilities.ThrowProjectExceptionHelper(Exception innerException,String unformattedMessage,Object [] args)      在Microsoft.VisualStudio.ProjectSystem.ProjectErrorUtilities.ThrowProjectException(String message,Object arg0)      àMicrosoft.VisualStudio.ProjectSystem.CpsProjectItem`1.d__25.MoveNext()

2 个答案:

答案 0 :(得分:5)

This issue描述了与日志包含的相同的异常:

  

System.Reflection.TargetInvocationException:抛出了异常   通过调用的目标。 ---&GT;   Microsoft.VisualStudio.ProjectSystem.ProjectException:项类型   此项目项提供程序不支持“EntityDeploy”。

不幸的是,它没有直接的解决方案。

总的来说,您不应期望使用新的csproj格式顺利运行EF工具。 EntityFramework6存储库中有一个discussion,它收集迁移和EF工具的一些已知问题。 EF团队有一个明确的声明,我们不应期望对这些问题进行近乎修正:

  

在翻转方面,在ASP.NET Core应用程序中使用EF6是   可能但需要解决方法。例如。在这种情况下,保持模型   在具有传统项目文件的单独.NET Framework库中,   从使用新项目的解决方案中卸载任何项目   系统在处理迁移时使用。

     

我们不愿承诺让EF6迁移完全合作   新的项目系统因为我们认为会涉及到   重大投资会阻碍我们在主要方面取得进展   战略,但也许我们可以做的事情更便宜   减少变通方法的摩擦,例如让它仍然如此   需要将EF6模型放在一个单独的项目中,但至少你不需要   需要卸载其他项目。

关于你的问题,我可以建议如下:

  1. 尝试更新到最新的Visual Studio版本。我正在使用VS 2017版本15.3.0,我没有遇到同样的问题。在模型生成和设计师工作期间,我仍然会收到自发的错误/警告消息,但最终会正确生成模型。

  2. 如果它不适合您,请考虑切换到EF团队建议的解决方法,即将EF模型保存在与传统项目文件不同的库项目中。

  3. 嗯,这些建议可能不适合完美主义者,但是(再次)所有现有的VS工具尚未完全采用新的csproj格式,而且在发生这种情况时它是未知的。

答案 1 :(得分:0)

EF6 6.4.x 现在支持 Microsoft.Net.SDK 风格的项目。

您应该注意到 EF6 仍然不知道 AutoGenerateBindingRedirects 标志。

跑步时

Add-Migrations Add_Customer_Table

如果您收到“System.IO.FileLoadException”,那么您应该手动将绑定重定向添加到 app.config 中