3

是否可以同时使用 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 的存储?

4

5 回答 5

6

Sync Framework 使用其提供程序直接针对数据库工作,并且不支持直接通过 EF。Sql Compact 4 也是如此(请参阅 Sql Compact 4未启用的场景

于 2011-04-26T12:00:51.733 回答
2

不起作用 - 请参阅此页面,其中包含目前适用于 SQL Server CE 4 的限制:

使用 SQL Server 进行数据复制:Compact 4.0不支持使用Sync Framework使用 SQL Server 进行数据复制、合并复制或远程数据访问 (RDA)。

于 2011-04-26T12:07:38.893 回答
2

SQL CE 3.5 不适用于 Code First 方法(提供程序不支持 DDL 生成);但是,使用 EF 4.1 的模型优先或数据库优先方法应该可以正常工作。

于 2011-06-25T13:30:34.217 回答
2

是的,这是可能的- 如果您不依赖创建或迁移功能 (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函数中完成。

于 2012-10-02T12:14:01.743 回答
1

根据这篇文章,SQL Server Compact 3.5 不能与 Entity Framework 4.1 Code First 提供程序一起使用。它可以与 EF 4.1 模型优先或数据库优先一起使用。

于 2011-06-21T17:09:14.133 回答