繁体   English   中英

如何跨上下文共享表?

[英]How do I share tables accross Contexts?

请参阅下面的代码,该代码是我从在线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>());
    }
  }

如果我首先使用OrderReadContext(例如,通过使用GetByID),则OrderWriteContext在第一次使用时会出错,并说:“销售订单已存在”。 如果我首先使用OrderWriteContext(例如,通过使用InsertSalesOrder),则第一次使用OrderReadContext时会出错,并说:“销售订单已存在”。

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

鉴于此问题已用CQRS和域驱动设计标记,我将从这个角度回答。 在典型的CQRS应用程序中,读写数据库将是分开的。 即使它们驻留在同一数据库实例中,表也将是分开的。 这是因为读取和写入侧架构可能会有所不同,并且会在应用程序的整个生命周期内发生变化。

如果是这种情况,您将完全避开此问题。

如果您觉得有用,此图和说明将为典型的CQRS应用程序提供合理的概念架构。 CQRS +事件来源-逐步概述

希望这个对你有帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM