是否可以同时使用 CF EF4.1、SQL Server Compact 4 和 Microsoft Sync Framework?
据我所知,MS Sync Framework 需要 SQL Server compact 3.5,但 EF4.1 使用 SQL Server Compact 4 ...
更新 好的,我看到使用微软同步框架同步 mssql ce4 是不可能的。那么是否可以使用 mssql ce3.5 作为实体框架 4.1 的存储?
是否可以同时使用 CF EF4.1、SQL Server Compact 4 和 Microsoft Sync Framework?
据我所知,MS Sync Framework 需要 SQL Server compact 3.5,但 EF4.1 使用 SQL Server Compact 4 ...
更新 好的,我看到使用微软同步框架同步 mssql ce4 是不可能的。那么是否可以使用 mssql ce3.5 作为实体框架 4.1 的存储?
Sync Framework 使用其提供程序直接针对数据库工作,并且不支持直接通过 EF。Sql Compact 4 也是如此(请参阅 Sql Compact 4未启用的场景
不起作用 - 请参阅此页面,其中包含目前适用于 SQL Server CE 4 的限制:
使用 SQL Server 进行数据复制:Compact 4.0不支持使用Sync Framework使用 SQL Server 进行数据复制、合并复制或远程数据访问 (RDA)。
SQL CE 3.5 不适用于 Code First 方法(提供程序不支持 DDL 生成);但是,使用 EF 4.1 的模型优先或数据库优先方法应该可以正常工作。
是的,这是可能的- 如果您不依赖创建或迁移功能 (EF 5.0)。
因此,首先使用 app.config 和命名配置将 EF 配置为使用 SQL CE 提供程序
<connectionStrings>
<add name="TestDatabase"
providerName="System.Data.SqlServerCe.3.5"
connectionString="Data Source=test.sdf"/>
</connectionStrings>
和
public class TestDbDataContext : DbContext
{
public TestDbDataContext() : base("TestDatabase") { }
}
在使用数据上下文之前禁用创建和迁移功能
Database.SetInitializer<TestDbDataContext>(null);
现在您可以访问数据库了。显然,您将不得不手动创建表。
警告:
插入服务器生成的密钥不适用于 CE 3.5。因此,您必须在客户端管理它们(最好使用 GUID 来防止密钥冲突)。此外,即使您打算自己管理密钥,您也需要小心。像这样定义密钥
[Key]
Guid Id { get; set; }
会导致 EF 认为密钥是在服务器端生成的。因此,您需要使用 EF 的 fluent API 定义关键属性以将其设置DatabaseGeneratedOption
为 None:
this.Property(p => p.ProductId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.IsRequired();
this.HasKey(p => p.ProductId);
这可以在配置类(如示例中)或数据上下文的OnModelCreating
函数中完成。
根据这篇文章,SQL Server Compact 3.5 不能与 Entity Framework 4.1 Code First 提供程序一起使用。它可以与 EF 4.1 模型优先或数据库优先一起使用。