在WPF中使用EF Code First和SqlCe

时间:2011-01-22 22:42:57

标签: c# wpf sql-server-ce ef-code-first

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

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

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

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

之前从未使用过SqlCe或EF Code First,因此欢迎任何帮助。赞赏。

提前致谢。

4 个答案:

答案 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包时几乎完全处于黑暗状态。我已经创建了几个非常基本的但从未做过任何高级的东西,如配置转换等。