使用NuGet的最新版本的EF6和sqlite。我终于得到了app.config文件工作后一些有用的帖子Stackoverflow。现在的问题是,虽然数据库是不创建表。
我的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=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <providers> <provider invariantName="System.Data.sqlite" type="System.Data.sqlite.EF6.sqliteProviderServices,System.Data.sqlite.EF6" /> </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> <connectionStrings> <add name="MyDBContext" connectionString="Data Source=|DataDirectory|MyDB.sqlite" providerName="System.Data.sqlite" /> </connectionStrings> </configuration>
我的简单测试程序:
class Program { static void Main(string[] args) { using (var db = new MyDBContext()) { db.Notes.Add(new Note { Text = "Hello,world" }); db.Notes.Add(new Note { Text = "A second note" }); db.Notes.Add(new Note { Text = "F Sharp" }); db.SaveChanges(); } using (var db = new MyDBContext()) { foreach (var note in db.Notes) { Console.WriteLine("Note {0} = {1}",note.NoteId,note.Text); } } Console.Write("Press any key . . . "); Console.ReadKey(); } public class Note { public long NoteId { get; set; } public string Text { get; set; } } public class MyDBContext : DbContext { // default constructor should do this automatically but fails in this case public MyDBContext() : base("MyDBContext") { } public DbSet<Note> Notes { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } } }
如果我手动创建表的程序工作正常,表更新。如果我删除数据库,EF将创建它,但不创建表,并且程序尝试读回带有该表不存在的错误消息的数据时失败。
有人设法让Code First使用EF6吗?将欣赏帮助/指导,因为我现在完全卡住!
谢谢大家。
不幸的是,System.Data.sqlite.EF6中的EF6提供程序实现不支持创建表。我下载了sqlite源代码看看,但是找不到任何创建表和迁移的东西。 EF6提供程序基本上与它们的Linq实现相同,所以它的目的都是查询数据库而不是修改它。
我目前正在使用sql Server的所有工作,并使用SQL Server Compact & SQLite Toolbox为sqlite生成sql脚本。然后可以使用sqliteCommand运行脚本来模拟迁移。
更新
在EF7年,对sql服务器压缩的支持被放弃,并且EF团队正在开发sqlite的新提供程序。提供程序将使用Microsoft的受管sqlite包装程序项目,Microsoft.Data.SQLite
而不是System.Data.sqlite项目。这也将允许在iOS,Android,Windows Phone / Mobile,Linux,Mac等上使用EF7,因为Microsoft的包装程序正在开发为便携式库。
它仍然处于测试阶段,但是如果你想看看,你可以从MyGet(dev,master,release)的ASP.Net开发源获取nuget包。查找EntityFramework.sqlite包。