代码优先 EF4.1 + SQL Server CE4 +同步框架

发布于 2024-11-03 12:40:55 字数 275 浏览 0 评论 0原文

是否可以同时使用 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的存储?

Is it possible to use CF EF4.1, SQL Server Compact 4 and Microsoft Sync Framework together?

As I got, MS Sync Framework needs SQL Server compact 3.5, but EF4.1 use SQL Server Compact 4...

UPDATE
Ok, I see that it's not possible to sync mssql ce4 using microsoft sync framework. So Is it possible to use mssql ce3.5 as a storage for entity framework 4.1?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

只是偏爱你 2024-11-10 12:40:55

Sync Framework 使用其提供程序直接针对数据库工作,并且不支持开箱即用地通过 EF。 Sql Compact 4 也是如此(请参阅 Sql Compact 4 未启用的场景

Sync Framework works directly against the databases using its providers and going thru EF is not supported out of the box. The same goes with Sql Compact 4 (see Scenarios not enabled by Sql Compact 4

猫腻 2024-11-10 12:40:55

不起作用 - 请参阅 此页面具有目前适用于 SQL Server CE 4 的限制

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


Won't work - see this page with limitations that apply to SQL Server CE 4 for now:

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).

浮云落日 2024-11-10 12:40:55

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

SQL CE 3.5 does not work with the Code First approach (the provider doesn't support DDL generation); however it should work just fine using the Model First or Database First approaches of EF 4.1.

定格我的天空 2024-11-10 12:40:55

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

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

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

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

Yes, it is possible - if you do not rely on the creation or migration features (EF 5.0).

So, first configure EF to use the SQL CE provider using the app.config and a named configuration

<connectionStrings>
    <add name="TestDatabase"
         providerName="System.Data.SqlServerCe.3.5"
         connectionString="Data Source=test.sdf"/>
</connectionStrings>

and

public class TestDbDataContext : DbContext
{
    public TestDbDataContext() : base("TestDatabase") { }
}

disable the creation and migration functionality before you use your data context

Database.SetInitializer<TestDbDataContext>(null);

Now you can access the database. Obviously you will have to create the tables manually.

Caveat:

Inserting server generated keys does not work with CE 3.5. So you will have to manage them on the client side (best use GUIDs to prevent key conflicts). Furthermore, even if you plan to manage the keys yourself you need to watch out. Defining the key like this

[Key]
Guid Id { get; set; }

will lead EF to believe that the key is generated on the server side. Therefore, you need to define the key properties using EF's fluent API to set the DatabaseGeneratedOption to None:

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

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

This can be either done in a configuration class (as in the sample) or in the data contex's OnModelCreating function.

懵少女 2024-11-10 12:40:55

According to this post, SQL Server Compact 3.5 cannot be used with Entity Framework 4.1 Code First provider. It can be used with EF 4.1 Model First or Database First.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文