代码之家  ›  专栏  ›  技术社区  ›  w0051977

如何跨上下文共享表格?

  •  1
  • w0051977  · 技术社区  · 7 年前

    请参阅下面的代码,这是我从CQRS在线教程中借用的:

    public class OrderReadContext: DbContext
        {
          public OrderReadContext() : base("name=GeekStuffSales") {
    
          }
          public DbSet<SalesOrder> Orders { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
          modelBuilder.HasDefaultSchema("Order");
       }
      }
      public class OrderSystemContextConfig : DbConfiguration
      {
        public OrderSystemContextConfig() {
          SetDatabaseInitializer(new NullDatabaseInitializer<OrderReadContext>());
        }
    
      }
    

    public class OrderWriteContext : DbContext
      {
        public OrderWriteContext() : base("name=GeekStuffSales")
        {
        }
    
        public DbSet<SalesOrder> Orders { get; set; }
        public DbSet<LineItem> LineItems { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
          modelBuilder.HasDefaultSchema("Order");
          modelBuilder.Entity<SalesOrder>().Ignore(s => s.LineItems);
        }
      }
    
      public class OrderSystemContextConfig : DbConfiguration
      {
        public OrderSystemContextConfig()
        {
          SetDatabaseInitializer(new NullDatabaseInitializer<OrderWriteContext>());
        }
      }
    

    我理解这里发生的事情,即不能两次创建同一个表。我只想创建一个数据库表,供这两个上下文使用。我该怎么做?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Codescribler    7 年前

    鉴于这个问题带有CQR和领域驱动设计,我将从这个角度回答。在典型的CQRS应用程序中,读写数据库是分开的。即使它们位于同一个数据库实例中,表也将是独立的。这是因为读写端模式可能不同,并且在应用程序的生命周期中会发生变化。

    如果您觉得有用,此图和说明为典型CQRS应用程序提供了合理的概念架构。 CQRS + Event Sourcing – A Step by Step Overview

        2
  •  0
  •   Maxim Ilyukhin    7 年前

    分别为两种上下文运行迁移(和更新数据库)。下面是如何处理多个上下文的示例: http://www.dotnettricks.com/learn/entityframework/entity-framework-6-code-first-migrations-with-multiple-data-contexts