3

是否可以一起使用CF EF4.1,SQL Server Compact 4和Microsoft Sync Framework?代碼優先EF4.1 + SQL Server CE4 +同步框架

隨着我,MS同步框架需要的SQL Server Compact 3.5,但EF4.1使用的SQL Server Compact 4 ...

UPDATE 好吧,我看到它不可能使用同步MSSQL CE4微軟同步框架。 那麼是否可以使用mssql ce3.5作爲實體框架4.1的存儲?

回答

6

Sync Framework直接針對使用其提供程序的數據庫工作,並且直接通過EF不支持開箱即用。與SQL精簡4也是如此(見Scenarios not enabled by Sql Compact 4

+0

想法是使用EF 4.1和MSSQL Compact並使用同步框架將數據庫複製到服務器數據庫(例如mssql 2008r2)。那麼我切換EF4。1與mssql compact 3.5的連接出現錯誤:無法確定類型爲「System.Data.SqlServerCe.SqlCeConnection」的連接的提供程序名稱。 – DolceVita 2011-04-26 12:14:04

2

將無法​​正常工作 - 看到適用於SQL Server CE 4現在this page with limitations

Data replication with SQL Server: Compact 4.0 does not support data replication with SQL Server using Sync Framework, merge replication or remote data access (RDA).

+0

但是有可能使ef4.1代碼優先使用mssql ce 3.5?由於Sync Framework在mssql ce3.5中可以正常工作 – DolceVita 2011-04-26 12:59:21

1

this post,SQL Server精簡版3.5不能與使用實體框架4.1代碼第一個提供者,它可以與EF 4.1 Model First或Database First一起使用

2

SQL CE 3.5不能與Code First方法一起工作(提供者不支持DDL生成);但它應該可以工作只需使用EF 4.1的Model First或Database First方法即可。

2

是的,這可能是 - 如果您不依賴創建或遷移功能(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認爲密鑰是在服務器端生成的。因此,你需要定義使用EF的流暢API設置DatabaseGeneratedOption爲無關鍵屬性:

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

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

這可以在配置類中或者完成(如樣品中),或在數據CONTEX的OnModelCreating功能。