Первый код EF4.1 SQL Server CE4 Sync Framework

#sql-server #ef-code-first #microsoft-sync-framework #ef4-code-only

#sql-сервер #первый ef-код #microsoft-sync-framework #ef4-только код

Вопрос:

Возможно ли использовать 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?

Ответ №1:

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

Комментарии:

1. Идея состоит в том, чтобы использовать EF 4.1 и MSSQL Compact и реплицировать эту базу данных с помощью sync framework с базой данных сервера (например, mssql 2008r2). Итак, затем я переключаю соединение EF4.1 на mssql compact 3.5, я получил сообщение об ошибке: не удается определить имя поставщика для подключения типа ‘System.Data.SqlServerCe.SqlCeConnection’.

Ответ №2:

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

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

Комментарии:

1. но возможно ли сделать ef4.1 первым кодом для работы с mssql ce 3.5? Потому что Sync Framework отлично работает с mssql ce3.5

Ответ №3:

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

Ответ №4:

Да, это возможно — если вы не полагаетесь на функции создания или миграции (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 поверить, что ключ сгенерирован на стороне сервера. Следовательно, вам необходимо определить ключевые свойства с помощью fluent API EF, чтобы установить для DatabaseGeneratedOption значение None:

 this.Property(p => p.ProductId)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
    .IsRequired();

this.HasKey(p => p.ProductId);
  

Это может быть сделано либо в классе конфигурации (как в примере), либо в OnModelCreating функции data contex.

Ответ №5:

Согласно этому сообщению, SQL Server Compact 3.5 нельзя использовать с поставщиком Entity Framework 4.1 Code First. Он может быть использован с EF 4.1 Model First или Database First.