【问题标题】:EntityFramework.SqlServer missing from nuget?nuget中缺少EntityFramework.SqlServer?
【发布时间】:2019-12-06 01:49:17
【问题描述】:

上下文

  • 创建实体框架数据层(Hibernate 经验)
  • 连接到 SQL Server Express
  • 客户端是一个简单的桌面应用程序
  • 我无法使用 Entity Framework CORE

详情

我一直在研究 Entity Framework 6 的文档 here 以及其他一些资源。我发现的有关 EF6 的所有内容都已过时。例如"says" 它会在您通过 nuget 管理器安装时将内容添加到配置文件中,但不会...

安装 EntityFramework NuGet 包时,entityFramework 部分会自动添加到项目的配置文件中。

令人沮丧,但我可以解决这个问题,而不是我的第一个 app.config

然而在 Entity Framework 文档中进一步让我感到困惑的是提供者注册。 Nuget 应该安装对EntityFramework.SqlServer 的引用,但它从未安装过。我也无法通过 nuget 包管理器安装它。我设法在 nuget.org 中找到它,但它未列出,自 2015 年以来未更新

<providers>
    <provider invariantName="System.Data.SqlClient" 
              type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

问题

我还需要EntityFramework.SqlServer吗?如果我也有的话,我可以很容易地添加它,但这是正确的方法吗?人们还在现实世界/产品中使用这个旧的 .dll 吗?

我很想知道拥有更多 ET 6 经验的人将如何配置一个新项目。

更新 - 2019 年 12 月 9 日

所以再深入一点,如果您使用 PackageReference 而不是 Package.config 安装 Nuget 包,则此行为不起作用。您可以通过导航到 Tools --> Options--> Nuget Package Manager --> General --> Default package management format

来更改它

【问题讨论】:

  • EntityFramework.SqlServer 是 Entity Framework Core 的一部分 - 不是在完整 .NET 框架上运行的“基础”Entity Framework (v6.x)

标签: c# sql-server entity-framework nuget


【解决方案1】:

只需将 EntityFramework NuGet 包添加到您的空 Windows 窗体项目,就应该在您的 .csproj 中添加以下引用:

  <ItemGroup>
    <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
    </Reference>
    <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup> 

以及您的 App.config 中的以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework"
          type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          requirePermission="false"/>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
    </startup>
    <entityFramework>
        <providers>
            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
        </providers>
    </entityFramework>
</configuration>

【讨论】:

  • 因此为了澄清起见,此行为仅适用于工具中的 Package.config 格式 --> 选项--> Nuget 包管理器 --> 常规 --> 默认包管理格式(至少对我而言) )。在修改它之前,我将它设置为 PackageReference。
  • 标记为已回答,因为它阐明了“应该”发生的情况
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 2021-11-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多