SQLite错误没有这样的列使用Entity Framework

时间:2012-07-20 15:50:53

标签: c# linq entity-framework sqlite

我正在尝试追踪只出现在某些客户端计算机上的错误,当然我们无法在内部重现错误。抛出的InnerException

  

SQLite错误没有这样的列:Extent1.UserDefinedPid

无法找到的列是在SQLite数据库中定义的位字段:

[UserDefinedPid] bit NOT NULL DEFAULT 0

EDMX文件包含此定义(仅部分内容):

<EntityType Name="Parameter">
  <Key>
    <PropertyRef Name="ParameterID" />
  </Key>
  <Property Type="Int64" Name="ParameterID" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
  ...
  <Property Type="Boolean" Name="UserDefinedPid" Nullable="false" />
  ...
</EntityType>

我们已经确认了相同的SQLite数据库文件,并且正在加载正确的System.Data.SQLiteSystem.Data.SQLite.Linq dll,但由于某些奇怪的原因,某些计算机似乎认为此列已丢失。

我们正在使用的数据库是加密的,我们有一个应用程序的app.config文件,确保其他安装的SQLite不会干扰应用程序。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections></configSections>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <system.data>
    <DbProviderFactories>
      <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>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SQLite" culture="neutral" publicKeyToken="db937bc2d44ff139" />
        <bindingRedirect oldVersion="1.0.0.0 - 2.0.0.0" newVersion="1.0.66.0" />
      </dependentAssembly>
     </assemblyBinding>
  </runtime>
</configuration>

我不知道为什么在某些机器上失败了。非常感谢任何想法: - )

1 个答案:

答案 0 :(得分:0)

我强烈怀疑您使用的是quite old version System.Data.SQLite。

也许您可以尝试找到here找到的最新版本。

一旦你这样做,app.config文件将不再需要它了:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Data.SQLite" culture="neutral" publicKeyToken="db937bc2d44ff139" />
    <bindingRedirect oldVersion="1.0.0.0 - 2.0.0.0" newVersion="1.0.66.0" />
  </dependentAssembly>
 </assemblyBinding>

我对你提到的加密问题有点不清楚。您是使用提供给SQLiteConnection连接对象的密码进行加密,还是使用SEE extension