Entity Framework 6与SQL Server Compact 4.0

12

我仍在尝试跟随一份关于如何使用Entity Framework和Code First方法的在线视频教程。目前我的EDM已经成功验证,现在是实际构建数据库的时候了。讲师使用的是SQL Server,当第一个查询命令(ToList())针对一个DbContext对象执行时,数据库会自动创建。

由于我计划在未来的应用程序中使用基于文件的SQL Server Compact,因此我尝试使用SQL Server Compact 4.0复制教程示例。我安装了NuGet包“EntityFramework.SqlServerCompact”和“Micrososft SQL Server Compact Edition”。显然,这会在app.config中添加一个新的提供程序条目:

<providers>
  <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>

但当我运行第一个查询命令时,我收到了错误消息。

对于上下文“DataModelContext”,启用了迁移,但数据库不存在或不包含映射的表。使用迁移创建数据库及其表,例如通过从包管理器控制台运行“Update-Database”命令。

当我运行Update-Database时,我得到以下消息:

没有未处理的显式迁移。
应用自动迁移: 201310311356014_AutomaticMigration。
运行种子方法。

并且没有创建数据库,至少程序仍然以上述错误消息退出。

EF难道不会自动创建SQL Server CE数据库吗?如果是这样,那么如何将手动创建的DB与我的应用程序连接?


你改变了连接字符串吗? - Rand Random
我只是来这里写一下,现在它可以工作了,因为我手动添加了一个连接字符串,所以你是完全正确的。这是正确的做法吗?手动将连接字符串添加到app.config中?(之前没有任何类型的连接字符串)。 - tafkab76
是的,因为如果不这样做,它将不使用真正的SqlServer,而是使用MSSqlServer内置的SqlLite版本。 - Rand Random
请自己编写答案并接受它,这样这个问题就不会一直保持开放状态了。 - Rand Random
我立刻尝试了那个,但由于我的声誉不佳,我至少还需要等待八个小时才能回答自己的问题。 - tafkab76
啊,好的,我从来没有尝试过,所以不知道。 :) - Rand Random
1个回答

13

问题可以通过手动向app.config文件的<configuration>标签末尾添加连接字符串来解决:

  <connectionStrings>
    <add name="DataModelContext"
         providerName="System.Data.SqlServerCe.4.0"
         connectionString="Data Source=C:\Users\sblxxx\Documents\Visual Studio 2012\Projects\Pluralsight\EF5\CodeFirst\db\cfdb.sdf"/>
  </connectionStrings>

嗨,我有同样的问题。如何解决数据源中相对路径的问题?我能解释一下吗? - emcas88
3
我解决了,我必须使用“Data Source ='DataDirectory'\databasename.sdf”。 - emcas88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接