当前位置: 首页 > 知识库问答 >
问题:

同步两个dbcontexts的数据(不同的提供程序)

上官恩
2023-03-14

我正在使用代码优先和EF6创建一个小项目,但现在我面临一个问题:

如果一个实体有一个自动ID PK,并且例如3个实体(ID:1,ID:2,ID:4-Id3已删除),那么克隆上下文将具有(ID:1,ID:2,ID:3)的实体。

我的问题是:有没有办法强制AI PK的值,或者至少强制跳过ID?或者,是否有通过dbcontexts将数据库复制到另一个数据库的最佳方法?

我在这里发现了一篇关于编程生成IDs的有趣文章,但它是用Java和Hibernate编写的。如果我能和英孚一起做这样的事情,我想我可能会解决问题。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

            modelBuilder.Properties().Where(p => p.Name.ToLower().Contains("id"))
                    .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
        }

它确实有效,但这导致我的OnlineContext没有自动ID,这不是目的,所以我只将这段代码放在我的OfflineContext中:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Properties().Where(p => p.Name.ToLower().Contains("id"))
                    .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
        }

现在成功了,谢谢

共有1个答案

厍浩广
2023-03-14

根据Gert Arnold的建议,我在我的OfflineContext上使用Fluent API做了一些更改,不使用AutoID:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Properties().Where(p => p.Name.ToLower().Contains("id"))
                    .Configure(p => p.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None));
        }

现在它们完全同步了。

 类似资料:
  • ssh-keygen和openssl是否可能从同一个私钥生成两个不同的公钥?命令与命令生成的公钥(和之间的内容)不同。

  • 问题内容: 我面临有关Java方法同步的问题。希望我能简要解释一下: 我在两个不同的类中,在两个不同的包中有两个不同的方法。就像是: 好的,所以现在我需要同步这两个 不是thread的方法 。到目前为止,我有两种不同的方法: 共享信号量 。 在和外部创建一个共享的静态信号量,例如: 无论如何,我真的不知道JVM是否会将其视为共享信号量。 已同步(SharedClass.class) 。 使用共享类

  • 问题内容: 嗨,在一个测试套件上,我看来我有2个同一个提供程序的活动实例,一个实例用于实现,另一个实例用于实际实现。 我的结论基于以下事实:在测试中,我尝试用jest.fn调用替换方法,但仍然在我正在测试的服务上,该方法仍指向原始实现。 更奇怪的是,我能够模拟执行完全相同过程的另一个服务,好像取决于这些服务的注入方式(它们来自容器图中的位置)是否起作用。 我将尝试分享一些片段,但是,当然,只有一个

  • 我在xml文件中使用了约束布局。我有一个类似例子中的视图。Imageview和textview。我希望这两个在点击后有相同的动作。怎么才能把两者组合在一起,给他们一个id? xml:

  • 问题内容: 可以说我有: 我有一个 ApplicationModule ,它需要为 Rec 和 Circle 提供实例: 和 ApplicationComponent : 以这种方式使用代码-无法编译。错误说 错误:(33,20)错误:形状被绑定多次。 对我来说,这是不可行的,因为该组件正试图找到一个实例,并且它找到了两个实例,因此它不知道要返回哪个实例。 我的问题是-我该如何处理? 问题答案:

  • 问题内容: 这是我的学校项目。我很喜欢eForum的部分。我试图删除一个用户,被删除的用户的所有主题和回复也将被删除。 此方法检索表的第一列的值并将其存储为userID。然后,它将执行delete sql语句以删除某些用户。 对于此方法,它将采用另一个表的第一列的值(该表显示所有线程)并执行delete sql语句。 但是,删除一些用户后,被删除用户的线程和回复仍存储在数据库中。我目前在数据库中使