abr*_*fra 10 c# sqlite wpf entity-framework
我正在使用我的应用程序Entity Framework和System.Data.SQLite在.NET 4.5上使用WPF和C#在我的机器上运行良好,但在测试机器上,当我通过EntityFramework访问sqlite数据库时收到此错误:
"DbProviderFactories"部分每个配置文件只能出现一次.
我发现错误是在测试机器中,在machine.config中:
<system.data>
<DbProviderFactories>
<add name="IBM DB2 for i5/OS .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for i5/OS" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
</DbProviderFactories>
<!-- This is the line to remove - empty element -->
<DbProviderFactories/>
</system.data>
Run Code Online (Sandbox Code Playgroud)
我删除了最后一个空元素,现在一切正常.我想我有一些与IBM.Data.DB2.iSeries istallation(IBM Client Access)相关的东西.
我的问题是:如何在不手动编辑machine.config的情况下删除空元素?我已经尝试<clear />在app.config文件中插入标记但不起作用.
我发现其他类似于我的问题,但没有一个建议如何解决问题而无需手动编辑machine.config来解决问题.
这是我的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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.xml.serialization>
<xmlSerializer useLegacySerializerGeneration="true" />
</system.xml.serialization>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
<!--STAI MOLTO ATTENTO-->
<legacyUnhandledExceptionPolicy enabled="1"/>
</startup>
<connectionStrings>
<add name="db" connectionString="Data Source=clients.db;Version=3;New=False;Compress=True;" />
<add name="icmdbEntities" connectionString="metadata=res://*/MainModel.csdl|res://*/MainModel.ssdl|res://*/MainModel.msl;provider=System.Data.SQLite;provider connection string="data source=.\icmdb.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<system.data>
<DbProviderFactories>
<clear />
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
<appSettings>
<add key="ditta" value="default" />
<add key="demo" value="true"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Ian*_*oyd 24
我今天遇到了这个问题.
这些machine.config文件位于:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.configC:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.configC:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.configC:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config损坏的版本machine.config包含:
<system.data>
<DbProviderFactories>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
</DbProviderFactories>
<DbProviderFactories/>
</system.data>
Run Code Online (Sandbox Code Playgroud)
安装iSeries驱动程序损坏了以下machine.config文件:
| Framework | Platform | Factory Added? | Corrupted Machine.config? |
|-----------|----------|----------------|---------------------------|
|v4.0.30319 | x64 | Yes | Yes |
|v4.0.30319 | x86 | Yes | Yes |
|v2.0.50727 | x86 | No | No |
|v2.0.50727 | x64 | No | No |
Run Code Online (Sandbox Code Playgroud)
很高兴您只需担心IBM破坏了一半的machine.config文件; 以及那些只使用.NET 4的应用程序.
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config (好)C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config (好)C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config (腐败)C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config (腐败)从提升的记事本中,打开两个文件,并删除无关的空<DbProviderFactories/>元素,让您:
<system.data>
<DbProviderFactories>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
</DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)
而且你已经修好了.
Tho*_*ham 10
该问题是由安装IBM iAccess for Windows(特别是.NET Provider for DB2组件)引起的.我在V7R1中亲眼看过它,但其他人已经引用了与V6R1相同的问题.
IBM意识到了这个问题,并在其中一个服务版本中进行了修复.
从V7R1 服务版本文档:
针对APAR SE45767的问题描述:
在未知情况下,安装.Net数据提供程序时(作为完整或自定义安装类型的一部分),会发生对machine.config XML文件的损坏.腐败被隔离到与DbProviderFactories相关的部分XML数据 - 并且通常被观察到包括XML数据的某些行的重复.
修正APAR SE45767:
将提供一个预防性修复程序,它将消除machine.config损坏的可能原因.
将不提供更新已损坏的machine.config文件的更正修复程序.如果可能,请使用记录在案的本地修复或规避.
APAR SE45767的注意事项:
如果不需要.Net数据提供程序,则可以通过执行自定义安装并确保不安装.Net Data提供程序来避免此问题.如果需要.Net提供者,则不知道规避.利用本地修复程序解决问题.
至于修复问题,你需要修复machine.config(32位和64位),因为它不符合为system.data定义的模式.这很简单 - 只需编写一个简单的.NET应用程序,它使用XmlDocument加载machine.config,找到重复的DbProviderFactories元素,删除它并保存文件.或者使用PowerShell脚本或其他任何可以操作XML文档的脚本.
| 归档时间: |
|
| 查看次数: |
20588 次 |
| 最近记录: |