是否可以将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是不可能的。 那么可以使用mssql ce3.5作为实体框架4.1的存储吗?
答案 0 :(得分:6)
Sync Framework使用其提供程序直接对数据库起作用,并且不支持开箱即用。 Sql Compact 4也是如此(参见Scenarios not enabled by Sql Compact 4
)答案 1 :(得分:2)
无效 - 请参阅适用于SQL Server CE 4的this page with limitations:
使用SQL Server进行数据复制: Compact 4.0 不支持数据 使用同步进行SQL Server复制 框架,合并复制或远程 数据访问(RDA)。
答案 2 :(得分:2)
SQL CE 3.5不适用于Code First方法(提供程序不支持DDL生成);但是,使用EF 4.1的Model First或Database First方法应该可以正常工作。
答案 3 :(得分:2)
是的,可能 - 如果您不依赖于创建或迁移功能(EF 5.0)。
因此,首先使用app.config和命名配置
配置EF以使用SQL CE提供程序<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);
这可以在配置类(如示例中)或数据上下文的OnModelCreating
函数中完成。
答案 4 :(得分:1)
根据this post,SQL Server Compact 3.5不能与Entity Framework 4.1 Code First提供程序一起使用。它可以与EF 4.1 Model First或Database First一起使用。