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功能。