Code-First EF4.1 + SQL Server CE4 + Sync Framework

Можно ли использовать 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 с помощью Microsoft Sync Framework. Так возможно ли использовать mssql ce3.5 в качестве хранилища для Entity Framework 4.1?

5 ответов

Sync Framework работает напрямую с базами данных, используя своих провайдеров, и использование EF не поддерживается сразу после установки. То же самое касается Sql Compact 4 (см. Сценарии, не включенные в Sql Compact 4

SQL CE 3.5 не работает с подходом Code First (провайдер не поддерживает генерацию DDL); однако он должен работать просто отлично, используя подходы First Model или Database First в EF 4.1.

Не будет работать - см. Эту страницу с ограничениями, которые применяются к SQL Server CE 4 на данный момент:

Репликация данных с SQL Server: Compact 4.0 не поддерживает репликацию данных с SQL Server с использованием Sync Framework, репликации слиянием или удаленного доступа к данным (RDA).

Да, это возможно - если вы не полагаетесь на функции создания или переноса (EF 5.0).

Итак, сначала настройте EF для использования поставщика SQL CE, используя app.config и именованную конфигурацию

<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 поверить, что ключ генерируется на стороне сервера. Поэтому вам нужно определить ключевые свойства, используя свободный API EF для установки DatabaseGeneratedOption Нет

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 Model First или Database First.

Другие вопросы по тегам