如何为Entity Framework 4.3和SQL Server Compact 4.0创建引导程序类

3

(TL;DR 版本是底部粗体的问题)

当 Entity Framework 4.1 Code First 最初发布时(实际上是在 CTP5 时间左右),有一个名为 EFCodeFirstNuGet 包。它可以与另一个名为 EFCodeFirst.SqlServerCompact 的 NuGet 包一起使用,该包允许使用 SQL Server Compact 4.0(SQL Server CE)与 EF 进行交互。

安装 EFCodeFirst.SqlServerCompact 包会生成一个名为 SQLCEEntityFramework.cs 的“引导程序”类,并将其放置在 App_Start 文件夹中。该类将设置 EF 的 Database.DefaultConnectionFactory,并通过使用 WebActivator 包来生成其他有用方法的“存根”(如初始化、种子数据库等)。

这两个包(EFCodeFirstEFCodeFirst.SqlServerCompact)已被弃用,看起来已被等效的 EntityFrameworkEntityFramework.SqlServerCompact 替代,并且两者目前均为4.3.1版本。
我的问题是,在新项目中使用这些新包时,它们似乎没有创建“bootstraper”类以便在运行时设置EF使用SQL Server Compact。当然,我可以从先前的项目中复制旧版本的类,但最好知道NuGet包仍包含该功能(可能会随时间更新)。
是否有任何方法使最新版本(本文撰写时为4.3.1)的EFCodeFirst.SqlServerCompact 包创建 SQLCEEntityFramework.cs 启动程序类,无论是在安装后还是事后(例如通过powershell命令)? 更新:
我刚刚注意到以前版本的EFCodeFirst.SqlServerCompact NuGet 包仍然依赖于 WebActivator 包(被引导程序类所使用), 但是这个依赖已经从最新版本紧接在最新版本之前的版本中移除了。看起来生成引导程序类的功能已被删除,但我想知道为什么?

我认为最新的软件包存在一些问题,团队正在调查。 - ErikEJ
@ErikEJ 这是正确的,但与问题没有直接关系。现在,请使用Install-Package EntityFramework.SqlServerCompact -version 4.3.0。 - Arthur Vickers
@ErikEJ 我们已经上传了一个4.3.2版本的软件包,修复了缺失程序集的问题。 - Arthur Vickers
1个回答

3
在EF 4.1中,按照惯例(即不明确指定连接字符串),让Code First创建SQL Server Compact数据库的唯一方法是在代码中设置DefaultConnectionFactory。这会带来问题,因为需要知道正在使用哪个数据库的工具(如迁移)不知道此代码是否存在。
在EF 4.3中,我们添加了在web.config文件中执行此操作的功能。EntityFramework.SqlServerCompact包利用此功能,在您的Web配置中将SQL Conmpact设置为默认连接工厂。因此,它不需要使用WebActivator或使用代码来设置此内容。
如果您愿意,仍然可以使用代码方法,但请注意,像迁移之类的东西可能无法正常工作,我们鼓励您改用配置文件。

非常感谢你的回答,Arthur。我没有注意到这是在web.config中进行设置而不是在引导类中进行设置,而且这种更改的原因是完全合理的,但是,有没有任何文件记录了这个更改呢?我试图找到针对EF 4.3(和EF.SQLCe)NuGet包的特定文档,但似乎非常稀少。 - CraigTP
2
@CraigTP Rowan 在这里记录了config文件的更改: http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx。我认为在EntityFramework.SqlServerCompact包中没有针对它们使用的具体文档。我会在待办事项列表中添加一项,撰写相关内容。 - Arthur Vickers
再次感谢你,Arthur。你帮了我大忙! - CraigTP
@ArthurVickers 我尝试了4.3.0和4.3.2版本的包,但仍然遇到错误:无法检索MVCProject1.Models.Test的元数据。存在生成'ScaffoldingConnectionFactory'的错误。请尝试重建您的项目。 - TheVillageIdiot

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