Entity Framework 6 / Visual Studio 2013 Prof 中的 Firebird 数据库提供程序兼容性问题
Entity Framework 6 / Firebird database provider compatibility issue in Visual Studio 2013 Prof
我在 Windows 7-x64 上使用 Visual Studio 2013 Professional 和 .Net 4.5。我安装了 Firebird 2.5.4-x64。
我知道其他人可以将 Firebird 与 Entity Framework 6 一起使用,我通过阅读大量博客和 Whosebug 帖子自行解决了几个问题。但是我已经尝试了我能想到的一切,但我完全被困住了。我想在我完全放弃使用 Firebird 之前,我会看看是否有人可以帮助我找出我做错了什么。
似乎有很多关于如何在 visual studio 中配置 firebird 的过时信息,我已经尝试了很多变体,但这是我认为正确的过程:
- 我安装了FirebirdSql.Data.FirebirdClient-4.6.1.0.msi.
我确认它更新了 GAC:
The Global Assembly Cache contains the following assemblies:
FirebirdSql.Data.FirebirdClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSIL
Number of items = 1
我确认它在 machine.config 个文件中更新:
<system.data>
<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/>
</DbProviderFactories>
</system.data>
我安装了DDEXProvider-3.0.1.0.msi
- 我确认条目已添加到注册表中并且路径正确
- 我创建了一个新的
Class Library
项目
我安装了以下 Nuget 包:
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
<package id="EntityFramework.Firebird" version="4.6.1.0" targetFramework="net45" />
<package id="FirebirdSql.Data.FirebirdClient" version="4.6.1.0" targetFramework="net45" />
我已验证对 App.config 文件进行了更新。 (除了尝试下面的默认 App.config 文件外,我还尝试使用 the one in this blog 之类的文件)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="FirebirdSql.Data.FirebirdClient" />
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient" />
</DbProviderFactories>
</system.data>
</configuration>
我成功构建了项目
- 我成功添加了一个连接到现有的 Firebird 数据库(Firebird 数据提供者和数据源显示在选项中)
- 我尝试添加一个新的
ADO.Net Entity Data Model
,使用 EF Designer from database
选项和我刚刚添加的数据连接
当我点击 Next
时出现了这个错误:
Your project references the latest version of Entity Framework; however,
an Entity Framework database provider compatible with this version could
not be found for your data connection. If you have already installed a
compatible provider, ensure you have rebuilt your project before
performing this action. Otherwise, exit this wizard, install a compatible
provider, and rebuild your project before performing this action.
如果我不安装 EntityFramework Nuget 包,则会启用一个 EF 5.0 选项,并且在使用 5.0 时不会出现此错误。 (但我真的很想改用 6.x!)
有谁知道我怎样才能克服这个错误?还有什么我可以看或做的事情来弄清楚吗?感谢您的帮助!
您在已注册提供商的配置中缺少 entityFramework
部分。安装 EntityFramework.Firebird
时应添加设置。
<entityFramework>
<defaultConnectionFactory type="FirebirdSql.Data.EntityFramework6.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, EntityFramework.Firebird" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
可以看到全App.config
here.
还有repository might give you head start, although it's just result of basically installing NuGet packages. More details here.
哇!我终于明白是怎么回事了。我使用 Manage NuGet Packages...
来安装软件包,似乎所有安装都没有问题。我正在学习另一个教程,该教程让我使用包管理器控制台,但出现错误,因为我的项目位于网络共享上。所以,我想知道 firebird 的东西是否也有类似的问题。
果然,当我在控制台运行 install-package entityframework.firebird
时,我看到了错误!这可以解释为什么我的 app.config 文件没有得到更新。现在 an Entity Framework database provider compatible with this version could
not be found
消息完全有意义。太糟糕了 Manage NuGet Packages...
当出现问题时不会弹出错误消息!那会为我节省大量时间。
我在 Windows 7-x64 上使用 Visual Studio 2013 Professional 和 .Net 4.5。我安装了 Firebird 2.5.4-x64。
我知道其他人可以将 Firebird 与 Entity Framework 6 一起使用,我通过阅读大量博客和 Whosebug 帖子自行解决了几个问题。但是我已经尝试了我能想到的一切,但我完全被困住了。我想在我完全放弃使用 Firebird 之前,我会看看是否有人可以帮助我找出我做错了什么。
似乎有很多关于如何在 visual studio 中配置 firebird 的过时信息,我已经尝试了很多变体,但这是我认为正确的过程:
- 我安装了FirebirdSql.Data.FirebirdClient-4.6.1.0.msi.
我确认它更新了 GAC:
The Global Assembly Cache contains the following assemblies: FirebirdSql.Data.FirebirdClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSIL Number of items = 1
我确认它在 machine.config 个文件中更新:
<system.data> <DbProviderFactories> <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> <add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/> </DbProviderFactories> </system.data>
我安装了DDEXProvider-3.0.1.0.msi
- 我确认条目已添加到注册表中并且路径正确
- 我创建了一个新的
Class Library
项目 我安装了以下 Nuget 包:
<package id="EntityFramework" version="6.1.3" targetFramework="net45" /> <package id="EntityFramework.Firebird" version="4.6.1.0" targetFramework="net45" /> <package id="FirebirdSql.Data.FirebirdClient" version="4.6.1.0" targetFramework="net45" />
我已验证对 App.config 文件进行了更新。 (除了尝试下面的默认 App.config 文件外,我还尝试使用 the one in this blog 之类的文件)
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <system.data> <DbProviderFactories> <remove invariant="FirebirdSql.Data.FirebirdClient" /> <add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient" /> </DbProviderFactories> </system.data> </configuration>
我成功构建了项目
- 我成功添加了一个连接到现有的 Firebird 数据库(Firebird 数据提供者和数据源显示在选项中)
- 我尝试添加一个新的
ADO.Net Entity Data Model
,使用EF Designer from database
选项和我刚刚添加的数据连接 当我点击
Next
时出现了这个错误:Your project references the latest version of Entity Framework; however, an Entity Framework database provider compatible with this version could not be found for your data connection. If you have already installed a compatible provider, ensure you have rebuilt your project before performing this action. Otherwise, exit this wizard, install a compatible provider, and rebuild your project before performing this action.
如果我不安装 EntityFramework Nuget 包,则会启用一个 EF 5.0 选项,并且在使用 5.0 时不会出现此错误。 (但我真的很想改用 6.x!)
有谁知道我怎样才能克服这个错误?还有什么我可以看或做的事情来弄清楚吗?感谢您的帮助!
您在已注册提供商的配置中缺少 entityFramework
部分。安装 EntityFramework.Firebird
时应添加设置。
<entityFramework>
<defaultConnectionFactory type="FirebirdSql.Data.EntityFramework6.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, EntityFramework.Firebird" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
可以看到全App.config
here.
还有repository might give you head start, although it's just result of basically installing NuGet packages. More details here.
哇!我终于明白是怎么回事了。我使用 Manage NuGet Packages...
来安装软件包,似乎所有安装都没有问题。我正在学习另一个教程,该教程让我使用包管理器控制台,但出现错误,因为我的项目位于网络共享上。所以,我想知道 firebird 的东西是否也有类似的问题。
果然,当我在控制台运行 install-package entityframework.firebird
时,我看到了错误!这可以解释为什么我的 app.config 文件没有得到更新。现在 an Entity Framework database provider compatible with this version could
not be found
消息完全有意义。太糟糕了 Manage NuGet Packages...
当出现问题时不会弹出错误消息!那会为我节省大量时间。