在WPF中使用EF Code First和SqlCe

我正在尝试在我的WPF应用程序中使用EF Code First,我的想法是在AppData / MyApp中创建一个SqlCe Db(如果没有),并将其与EF Code First一起使用。

当我尝试从它应该创建的数据库中读取数据时,它正在给出错误,但是当我检查数据库上下文对象时,我看到它正在尝试在SqlExpress中创建它。

首先,我如何设置它与CE而不是SqlExpress一起使用并设置文件位置?

我尝试更改app.config中的连接字符串,但无法使其工作(它没有创建sdf文件),而且我不知道如何设置连接字符串路径到AppData文件夹,因为它在用户文件夹中(不固定)。

从未使用过SqlCe或EF Code First,所以欢迎任何帮助和赞赏。

提前致谢。

经过大量的捣乱,我已经设法让它工作了。 我的app.config有以下内容:

              

在部署中使用DbProviderFactory也会有所帮助。 它允许用户在不运行安装程序的情况下使用SQLCE 4(如果您提供本机binares,请在此处提供一些信息: http ://erikej.blogspot.com/2011/02/using-sql-server-compact- 40-with.html )。

这是一个可能的线索。 如果您使用NuGet包管理器安装EFCodeFirst.SqlServerCompact,并查看:Visual Studio 2010 \ Projects \ MyProject \ packages \ EFCodeFirst.SqlServerCompact.0.8.8482 \ Content,它为您的Web应用程序执行以下操作:

 public static class AppStart_SQLCEEntityFramework { public static void Start() { DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); // Sets the default database initialization code for working with Sql Server Compact databases // Uncomment this line and replace CONTEXT_NAME with the name of your DbContext if you are // using your DbContext to create and manage your database //DbDatabase.SetInitializer(new CreateCeDatabaseIfNotExists()); } } 

我不认为工具已经为SQLCE for WPF项目做好了准备。 它也阻止了我。

这可能在短期内没有帮助,但我认为从长远来看这将是最好的解决方案。 我还没有找到其他人记录如何做到这一点所以我想我必须弄清楚,除非有更多知识使用SqlCE4,CodeFirst和创建NuGet包的人打败我它。 我们需要的是一个NuGet包,可以是一个新包,也可以使现有的一个包足够聪明,可以将SqlCE4和CodeFirst添加到WPF和/或WinForms项目中。

现有的软件包似乎面向Web项目,因为它依赖于WebActivator。 据我所知,在非Web项目上安装WebActivator确实不合适。 我不知道NuGet包是否可以检测项目类型并根据该信息执行不同的安装逻辑。 对于负责维护EFCodeFirst.SqlServerCompact包以释放非Web版本或使现有版本变得更聪明的人来说,这将更好。

等待,在我的业余时间,我将看看我是否可以弄清楚如何做到并创造我自己的。 我不能保证会花多长时间,因为我在制作NuGet包时几乎完全处于黑暗中。 我已经创建了几个非常基本的,但从未做过任何高级的东西,如配置转换等。