使用Sql Server Compact 3.5 SP2的Entity Framework 6?

3
我发现了很多关于如何使用Entity Framework 6与Sql CE 4以及如何使用Entity Framework 4与Sql CE 4和3.5的信息,但是使用Entity Framework 6与Sql CE 3.5是不同的。据我所知,CE 3.5附带了一个在System.Data.SqlServerCe.Entity.dll中使用Entity Framework 4的提供程序。该提供程序使用较旧版本的基类,如果我尝试使用它,就会出现以下异常:System.InvalidOperationException:“Entity Framework提供程序类型'System.Data.SqlServerCe.SqlCeProviderServices,System.Data.SqlServerCe.Entity,Version=3.5.1.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91'的'Instance'成员未返回继承自'System.Data.Entity.Core.Common.DbProviderServices'的对象。Entity Framework提供程序必须从此类继承,并且'Instance'成员必须返回提供程序的单例实例。这可能是因为该提供程序不支持Entity Framework 6或更高版本。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882。”
这很有道理,让我意识到我需要的是一个 Entity Framework 6 的 Sql Server CE 3.5 SP2 提供程序。但是我似乎找不到这样的东西。Nuget 包 EntityFramework.SqlServerCompact 在所有版本中似乎只引用了 Sql Compact 4。这样的提供程序是否已经存在?如果是,它在哪里可以找到?我好像很难找到它。如果没有,那么通过使用 CE 4 中的代码并引用 3.5 来实现它是否合理,或者 CE 3.5 和 4 之间的差异是否太大,以至于无法简单地实现它?还有其他解决方法吗?
由于需要使用合并复制,而这在 4 中不受支持,并且希望使用 Entity Framework,因此我需要使用 3.5。如果没有直接的答案,我可能会使用其他东西代替 Entity Framework。
1个回答

9

好的,这是我听到的第二个请求,让我们来做吧。我会分叉代码,并为3.5制作一个Nuget包,取名为"EntityFramework.SqlServerCompact.Legacy",唯一需要更改的代码是3.5不支持通过Take和Skip调用ORDER BY..FETCH..OFFSET语法(即分页)。你对此感兴趣吗?

更新:包现在可在 NuGet 上获得。http://www.nuget.org/packages/EntityFramework.SqlServerCompact.Legacy


是的,这确实让我感兴趣,也是我正在寻找的。对于我的当前项目,分页不是一个问题。我愿意做出贡献 - 但听起来你说代码中没有太多需要改变的地方,所以这似乎并不需要花费太多精力。你提出的包名对我来说很合适。 - Dave Rael
太好了,我已经在做了 - 你考虑过使用LINQ to SQL吗? - ErikEJ
谢谢Erik,太棒了。我已经考虑过其他选择了,如果没有这种方法来让实体框架工作,我可能会使用NHibernate。 - Dave Rael
有什么我可以做来协助你在这方面的努力吗? - Dave Rael
你想要贡献代码吗?那我可以将你设为协作者吗?https://entityframework.codeplex.com/SourceControl/network/forks/ErikEJ/SqlCe35Revival - ErikEJ
显示剩余5条评论

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