有沒有人得到新的System.Data.SQLite 1.0.91.0與Visual Studio 201#中的實體框架6一起工作?如果你有,你是怎麼做到的?System.Data.SQLite 1.0.91.0和EF6.0.2
更新 - 2014年3月20日:System.Data.SQLite 1.0.92.0已經發布,但我沒有運氣在VS2013創建一個EDMX :(我結束了使用包管理器(因爲EF6。#。#是依賴項在新的SQLite的NuGet包):
uninstall-package entityframework -force
重啓VS2013,換上從現有的數據庫中獲取VS2013生成EDMX老EF5:
install-package entityframework -version 5.0.0
注:這不是一個複雜的,多表SQLite關係數據庫測試,所以我不知道會出現什麼其他問題如果我的確使用了幾種導航(FK)關係:/
EDMX/Model的答案首先:(更新 - 2014年3月2日)我找到了一個解決方法,但它不夠一致,需要太多的步驟來認爲它是一個有效的解決方案。基本上是:
你讓所有的類(ES)文件(S),
作出了桌子現有的SQLite數據庫的連接,
修改web/app.config中至於仍然出色的SQLite問題單(http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77)中的錯誤描述,包括僞造cdsl/.ssdl/.msl碎片和
然後手動創建設計器中的所有實體模型ñ空EDMX重建上一個實體項目,然後...
你點擊右鍵並選擇「從數據庫更新」 ......
有時EF/VS2013將添加.TT前/ DbContesxt,有時它們不。太'打'或'錯':(
回答「代碼優先」有和沒有現有的SQLite數據庫(基於PMCB,Drexter和Jimi的建議)但請注意,您不能生成任何EF模型或EDMX文件[原文 - 概念架構定義語言(.CSDL),存儲架構定義語言(.SSDL)和映射規範語言(.MSL)]自動在Visual Studio 2013中。我沒有嘗試手動創建EDMX文件,看看他們是否會是可口EF即使我做到了,在我看來,這樣做的所有手動創建/映射/修改/ XML編輯擊敗一個基於實體框架的整體目標/概念...
<connectionStrings>
<add name="DogsContext" connectionString="Data Source=|DataDirectory|\dogs.s3db;" providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
這裏測試類(注意t帽子我不得不把DogID改變的Int64得到它與SQLite的工作... ...):
using System.Data.Entity;
namespace WebApplication1.Models
{
public class Dog
{
public Dog() { }
public Int64 DogID { get; set; }
public string DogName { get; set; }
}
}
,這裏是測試的DbContext:
using System.Data.Entity;
namespace WebApplication1.Models
{
public class DogsContext : DbContext
{
public DogsContext() : base() { }
public DbSet<Dog> DogNames { get; set; }
}
}
======== =====問題的原始細節==================
SQLite 1.0.91。0昨天發佈(http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki)與「添加對實體框架6的支持」。有一個在包括「自述」已添加以下以下內容的web.config /的app.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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
</configuration>
如果您使用的NuGet在VS2013中添加「System.Data.SQLite(在x86/x64)」,你現在得到此行加入到web.config中/的app.config:
<entityFramework>
...
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
...
</entityFramework>
作爲一個測試,我做了一個工作NET4.5.1/MVC4/EF5/System.Data副本.SQlite 1.0.90應用程序並運行PM:update-package就可以了。它成功地將上面的行添加到我的web.config中,並添加了所需的「DbProviderFactories」部分。重建並運行...失敗,找不到提供者。我在沒有「DbProviderFactories」的情況下嘗試它...未找到「未找到提供者」。我刪除了新的「提供者」片斷...未找到「未找到提供者」。所以我嘗試一個新的項目,但有和沒有身份(OWIN)的情況下,這是問題。兩者都不行......幾乎沒有想法,所以在Google/StackOverflow搜索後詢問。
============ 2014年2月14日===============
不幸的是,改變後的條目和許多變化並沒有對我的工作PC ... 我在Win8.1 Pro x64上使用VS 2013 Pro。 我重新安裝了System.Data.SQLite。 至少我得到一個新的錯誤同時與現有的SQLite數據庫和VS2013創建新的(我可以訪問並看到它與零代表適當的結構):
"An error occurred connecting to the database. The database might be unavailable. An
exception of type 'System.Data.Entity.Core.ProviderIncompatibleException' occurred. The
error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) :
Error 0175: The ADO.NET provider with invariant name 'System.Data.SQLite.EF6' is either
not registered in the machine or application config file, or could not be loaded. See the
inner exception for details.'"
兩個EF6和系統.Data.SQLite(x86/x64)通過NuGet引入全新的MVC Web應用程序和Windows控制檯應用程序。兩者都產生了上述錯誤......我開始懷疑,也許我的VS3013有些問題,但我不想花費另外6小時的時間下載並修補它,當我可以使用MVC4/SQLite/EF5時...
===== 2014年2月17日========
@Jimi - 這裏沒有運氣。我用NET 4.5和4.5.1嘗試了一個新的MVC和Windows應用程序項目。我嘗試使用EF6.0.0和EF6.0.2。在從NuGet添加「System.Data.SQLite(x86/x64)」後,我嘗試用安裝了System.Data.SQLite的本地副本替換3x SQLite.Data.xxx.dll引用。我還嘗試了NuGet「System.Data.SQLite.MSIL」包,而不是將DBFactories添加到我試過的各種版本的Web.Config和App.Config。
我也嘗試創建一個NET 4.0 MVC4 Web應用程序,但它似乎NuGet的「System.Data.SQLite(x86/x64)」現在包括對EF6的要求。有希望的是,我跟着它一起嘗試了各種'保存/創建新連接/編輯web.config/etc',但它不起作用。我已經放棄了現在,並回到SQLite與數據集,所以我可以使用Linq與System.Data.DataSetExtensions通過使DataTables「AsEnumerable」(或Java(jdbc)的人想要在他們的Android上的數據庫的脫機副本具有最小App界面的操作系統設備)。
========= 2014年2月19日=======
@Christian薩澳 - 我沒有得到EF6和System.Data.SQLite(或System.Data.SQLite。 EF6)一起工作,但......但
我剛剛發現http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77,說有一個新的SQLite NuGet包的更新:
mistachkin added on 2014-02-19 03:39:35:
All NuGet packages have been updated to 1.0.91.3. Several fixes are included
that pertain to supporting Entity Framework 6.
我有一個新的項目,現在測試它(MVC VS2013中的Web項目使用EF6.0.2和SQLite 1.0.91。3,面向.NET 4.5.1)...
再次運用新的SQLite 1.0.91.3。在web.config中已更改爲:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<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.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>
</system.data>
我將嘗試在下班後的配置(如吉米和PCMB建議)搞亂和發佈任何調查結果。
我只是試着重新安裝System.Data.SQLite的32位和64位版本(有和沒有添加到GAC),但EF6將無法與SQLite一起使用。如果我嘗試手動構建模型和映射,則任何時候我參考/嘗試使用EF6都會失敗。至於創建實體數據模型(無論是從現有的SQLite還是新的SQLite數據庫生成),無論我對配置,連接或提供者做什麼,它都會失敗/出錯。
=========== 2014年2月22日=============
他們拉/回滾的System.Data.SQLite 1.0.91.3更新到1.0.91.0。還有一個未解決的票(http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77)打開,其中包括一些mistachkin的建議。這是在app.config mistachkin建議嘗試(此配置不前或...工作對我來說):
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=.\northwindEF.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
</configuration>
我試圖mistachkin的建議,我們添加DLL到GAC後(使用.NET做「 gacutil.exe「)...
你取得任何進展?我被這個問題困住了...... –
嘿,你終於明白了嗎?請告訴你的進展... – Kourosh
'EF6.anything'還沒有運氣。對於CRUD應用程序,我一直在使用EF5,對於查詢,我使用基於JDBC/ODBC SQL的DAL與原始返回或構建Linq和Razor Views可用的對象。 – PWRR2207