我正在尝试在我的WPF应用程序中使用EF Code First,我的想法是在AppData / MyApp中创建一个SqlCe Db(如果没有),并将其与EF Code First一起使用。
当我尝试从它应该创建的数据库中读取数据时,它正在给出错误,但是当我检查数据库上下文对象时,我看到它正在尝试在SqlExpress中创建它。
首先,我如何设置它与CE而不是SqlExpress一起使用并设置文件位置?
我尝试更改app.config中的连接字符串,但无法使其工作(它没有创建sdf文件),而且我也不确定如何设置连接字符串路径到AppData文件夹,因为它在用户中文件夹(未修复)。
之前从未使用过SqlCe或EF Code First,因此欢迎任何帮助。赞赏。
提前致谢。
答案 0 :(得分:6)
在经历了很多混乱之后,我设法让它工作了。我的app.config有以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="Database"
connectionString="Data Source=Database.sdf"
providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0"
invariant="System.Data.SqlServerCe.4.0"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
</configuration>
在部署中使用DbProviderFactory也会有所帮助。它将允许用户使用SQLCE 4而无需为其运行安装程序(如果您提供本机binares,请在此处提供一些信息:http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html)。
答案 1 :(得分:0)
这是一个可能的线索。如果您使用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<CONTEXT_NAME>());
}
}
答案 2 :(得分:0)
我不认为工具已经为SQLCE for WPF项目做好了准备。它也让我陷入了困境。
答案 3 :(得分:0)
这可能在短期内没有帮助,但我认为从长远来看这将是最好的解决方案。我还没有找到其他人记录如何做到这一点所以我想我必须弄清楚,除非有更多知识使用SqlCE4,CodeFirst和创建NuGet包的人打败我它。我们需要的是一个NuGet包,要么是一个新包,要么使现有的一个包足够聪明,可以将SqlCE4和CodeFirst添加到WPF和/或WinForms项目中。
现有的软件包似乎面向Web项目,因为它依赖于WebActivator。据我所知,在非Web项目上安装WebActivator确实不合适。我不知道NuGet包是否可以检测项目类型并根据该信息执行不同的安装逻辑。对于那些负责维护EFCodeFirst.SqlServerCompact包以释放非Web版本或使现有版本变得更智能的人来说,它会更好。
等待,在我的业余时间,我将看看我是否能弄清楚如何做到并创造我自己的。我不能保证会花多长时间,因为我在制作NuGet包时几乎完全处于黑暗状态。我已经创建了几个非常基本的但从未做过任何高级的东西,如配置转换等。