【问题标题】:Code-First EF4.1 + SQL Server CE4 + Sync Framework代码优先 EF4.1 + SQL Server CE4 + 同步框架
【发布时间】:2011-08-12 23:26:37
【问题描述】:

是否可以同时使用 CF EF4.1、SQL Server Compact 4 和 Microsoft Sync Framework?

据我所知,MS Sync Framework 需要 SQL Server Compact 3.5,但 EF4.1 使用 SQL Server Compact 4...

更新 好的,我看到使用 microsoft 同步框架无法同步 mssql ce4。 那么是否可以使用 mssql ce3.5 作为实体框架 4.1 的存储?

【问题讨论】:

    标签: sql-server ef-code-first microsoft-sync-framework ef4-code-only


    【解决方案1】:

    是的,有可能 - 如果您不依赖创建或迁移功能 (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 的 fluent API 定义关键属性,将 DatabaseGeneratedOption 设置为 None:

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

    这可以在配置类(如示例中)或数据上下文的OnModelCreating 函数中完成。

    【讨论】:

      【解决方案2】:

      SQL CE 3.5 不适用于 Code First 方法(提供程序不支持 DDL 生成);但是使用 EF 4.1 的模型优先或数据库优先方法应该可以正常工作。

      【讨论】:

        【解决方案3】:

        根据this post,SQL Server Compact 3.5 不能与 Entity Framework 4.1 Code First 提供程序一起使用。它可以与 EF 4.1 模型优先或数据库优先一起使用。

        【讨论】:

          【解决方案4】:

          不起作用 - 请参阅目前适用于 SQL Server CE 4 的 this page with limitations

          使用 SQL Server 进行数据复制: Compact 4.0 不支持数据 使用 Sync 与 SQL Server 进行复制 框架,合并复制或远程 数据访问 (RDA)。

          【讨论】:

          • 但是是否可以让 ef4.1 代码优先与 mssql ce 3.5 一起使用?因为 Sync Framework 与 mssql ce3.5 配合得很好
          【解决方案5】:

          Sync Framework 直接针对使用其提供程序的数据库工作,并且不支持直接通过 EF。 Sql Compact 4 也是如此(参见Scenarios not enabled by Sql Compact 4

          【讨论】:

          • 想法是使用 EF 4.1 和 MSSQL Compact 并使用同步框架与服务器数据库(例如 mssql 2008r2)复制此数据库。然后我将 EF4.1 连接切换到 mssql compact 3.5 我收到错误:无法确定类型为“System.Data.SqlServerCe.SqlCeConnection”的连接的提供程序名称。
          猜你喜欢
          • 1970-01-01
          • 2014-07-30
          • 1970-01-01
          • 2014-05-28
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多