Code-First EF4.1 + SQL Server CE4 + Sync Framework - PullRequest
3 голосов
/ 26 апреля 2011

Можно ли использовать 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 в качестве хранилища для структуры сущностей 4.1?

Ответы [ 5 ]

6 голосов
/ 26 апреля 2011

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

2 голосов
/ 02 октября 2012

Да, это возможно - если вы не используете функции создания или переноса (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 значение None:

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

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

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

2 голосов
/ 25 июня 2011

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

2 голосов
/ 26 апреля 2011

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

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

1 голос
/ 21 июня 2011

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

...