EdmGen.exe 不适用于 System.Data.SQLite 高于 1.0.94.0 的版本
EdmGen.exe won't work with a System.Data.SQLite version greater than 1.0.94.0
我一直在尝试设置 entity framework 和 System.Data.SQLite(针对 .NET 4.0)。我使用的是 Visual Studio 2017,所以我知道没有可用的设计时组件。
我偶然发现了这个手动设置所有内容的指南:https://liiw.blogspot.co.uk/2014/12/sqlite-entity-framework-database-first.html
不过,我将按照上面 link 中的说明总结一下我得到的结果:
一个文件夹,包含以下项目:
EdmGen.exe
(从C:\Windows\Microsoft.NET\Framework\v4.0.30319
复制)
EdmGen.exe.config
x86
和 x64
文件夹,每个文件夹包含各自的 SQLite.Interop.dll
System.Data.SQLite.dll
System.Data.SQLite.EF6.dll
System.Data.SQLite.Linq.dll
TestDatabase.sqlite
,其中包含一些测试表。
gen.bat
EdmGen.exe.config
内容如下:
<configuration>
<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>
</configuration>
gen.bat
内容如下:
EdmGen.exe /mode:fullgeneration /c:"Data Source=TestDatabase.sqlite" /provider:System.Data.SQLite /entitycontainer:TestDatabase /project:TestDatabase /language:CSharp
运行 gen.bat
(或上面的命令),System.Data.SQLite
二进制文件是 System.Data.SQLite(或任何大于 1.0.94.0 的版本)的最新版本以下错误:
error 7001: The provider returned schema mapping information that is not valid.
Schema specified is not valid. Errors:
StoreSchemaDefinition(2,65) : error 0175: The specified store provider cannot be found in the configuration, or is not valid.
它适用于 System.Data.SQLite 程序集的 1.0.94.0 版。
谷歌搜索错误并没有找到关于我遇到的问题的任何答案。我在这里做错了什么?
所以我去打开了 a ticket on system.data.sqlite.org 结果发现 EdmGen.exe
不支持 Entity Framework 6. 他们提供了以下用于生成对象的说明:
The EdmGen tool is apparently not compatible with EF6. Instead, you will want
to use the legacy provider, which is System.Data.SQLite.Linq.
In the "EdmGen.exe.config" file, use:
<configuration>
<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" />
<remove invariant="System.Data.SQLite.Linq" />
<add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq" />
</DbProviderFactories>
</system.data>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
And then in the "gen.bat" file:
EdmGen.exe /mode:fullgeneration /c:"Data Source=TestDatabase.sqlite" /provider:System.Data.SQLite.Linq /entitycontainer:TestDatabase /project:TestDatabase /language:CSharp
The "EdmGen.exe.config" file above will also generate a trace log file
in the current directory, which may be useful in debugging. You can
remove that section if you like.
不幸的是,我不知道有什么方法可以为 Entity Framework 6 生成对象,而且我对 Entity Framework 总体来说还很陌生,所以对Entity Framework6 和之前版本Entity Framework 的区别。尽管如此,希望这个答案对以后遇到这个问题的任何人都有用。
我一直在尝试设置 entity framework 和 System.Data.SQLite(针对 .NET 4.0)。我使用的是 Visual Studio 2017,所以我知道没有可用的设计时组件。
我偶然发现了这个手动设置所有内容的指南:https://liiw.blogspot.co.uk/2014/12/sqlite-entity-framework-database-first.html
不过,我将按照上面 link 中的说明总结一下我得到的结果:
一个文件夹,包含以下项目:
EdmGen.exe
(从C:\Windows\Microsoft.NET\Framework\v4.0.30319
复制)EdmGen.exe.config
x86
和x64
文件夹,每个文件夹包含各自的SQLite.Interop.dll
System.Data.SQLite.dll
System.Data.SQLite.EF6.dll
System.Data.SQLite.Linq.dll
TestDatabase.sqlite
,其中包含一些测试表。gen.bat
EdmGen.exe.config
内容如下:
<configuration>
<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>
</configuration>
gen.bat
内容如下:
EdmGen.exe /mode:fullgeneration /c:"Data Source=TestDatabase.sqlite" /provider:System.Data.SQLite /entitycontainer:TestDatabase /project:TestDatabase /language:CSharp
运行 gen.bat
(或上面的命令),System.Data.SQLite
二进制文件是 System.Data.SQLite(或任何大于 1.0.94.0 的版本)的最新版本以下错误:
error 7001: The provider returned schema mapping information that is not valid.
Schema specified is not valid. Errors:
StoreSchemaDefinition(2,65) : error 0175: The specified store provider cannot be found in the configuration, or is not valid.
它适用于 System.Data.SQLite 程序集的 1.0.94.0 版。
谷歌搜索错误并没有找到关于我遇到的问题的任何答案。我在这里做错了什么?
所以我去打开了 a ticket on system.data.sqlite.org 结果发现 EdmGen.exe
不支持 Entity Framework 6. 他们提供了以下用于生成对象的说明:
The EdmGen tool is apparently not compatible with EF6. Instead, you will want to use the legacy provider, which is System.Data.SQLite.Linq.
In the "EdmGen.exe.config" file, use:
<configuration> <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" /> <remove invariant="System.Data.SQLite.Linq" /> <add name="SQLite Data Provider (LINQ)" invariant="System.Data.SQLite.Linq" description=".NET Framework Data Provider for SQLite (LINQ)" type="System.Data.SQLite.Linq.SQLiteProviderFactory, System.Data.SQLite.Linq" /> </DbProviderFactories> </system.data> <system.diagnostics> <trace autoflush="true" indentsize="4"> <listeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" /> <remove name="Default" /> </listeners> </trace> </system.diagnostics> </configuration>
And then in the "gen.bat" file:
EdmGen.exe /mode:fullgeneration /c:"Data Source=TestDatabase.sqlite" /provider:System.Data.SQLite.Linq /entitycontainer:TestDatabase /project:TestDatabase /language:CSharp
The "EdmGen.exe.config" file above will also generate a trace log file in the current directory, which may be useful in debugging. You can remove that section if you like.
不幸的是,我不知道有什么方法可以为 Entity Framework 6 生成对象,而且我对 Entity Framework 总体来说还很陌生,所以对Entity Framework6 和之前版本Entity Framework 的区别。尽管如此,希望这个答案对以后遇到这个问题的任何人都有用。