S'il vous plaît voir le code ci-dessous, que j'emprunté un tutoriel en ligne CQRS:Comment partager des tables dans des contextes?
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>());
}
}
et:
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>());
}
}
Si je OrderReadContext premier exemple en utilisant GetByID, puis les erreurs OrderWriteContext la première fois qu'il est utilisé en disant: "Sales Order existe déjà". Si j'utilise OrderWriteContext en premier, par exemple en utilisant InsertSalesOrder, puis les erreurs OrderReadContext la première fois qu'il est utilisé en disant: "Sales Order existe déjà".
Je comprends ce qui se passe ici, c'est-à-dire que vous ne pouvez pas créer deux fois la même table. Je veux juste créer une table de base de données à utiliser par ces deux contextes. Comment puis-je faire cela?
Merci. J'entends ce que vous dites pour ce +1. Cependant, comment testeriez-vous une application CQRS avec deux localdbs? Par exemple, si vous insérez des enregistrements dans la base de données d'écriture, vous ne les trouverez pas dans la base de données en lecture car la réplication n'est pas configurée. – w0051977
Je n'utiliserais pas la réplication car les deux bases de données sont susceptibles d'être différentes. Le côté lecture est susceptible d'être dénormalisé et concentré sur la vitesse de lecture. La base de données de domaine peut même ne pas être dans des tables. Concernant le test: vous testez les éléments du domaine séparément du côté lecture. Vous pouvez créer des tests d'intégration, mais cela nécessiterait plus d'espace que ce que j'ai ici pour expliquer. – Codescribler
Mon plan est d'utiliser SQL Server pour l'écriture et NoSQL pour la lecture. Cependant, pour tester, j'aurai deux LocalDBs qui sont SQL Server. En l'état (en utilisant votre approche), je vais entrer des informations dans la base de données d'écriture et il ne sera pas disponible pour sélectionner à partir de la lecture. Cela a-t-il du sens? – w0051977