Ho un progetto in cui il mio dominio è suddiviso tra un gruppo di assembly separati e DbContexts, tutti utilizzando lo stesso database Sql Server sottostante. Questi assembly non si fanno riferimento l'un l'altro con un'eccezione: ce n'è uno che contiene ciò che si potrebbe chiamare entità condivise, che sono comuni a tutti gli altri domini e talvolta fanno riferimento come proprietà di navigazione. esempio semplificato:Ignorare le entità dagli assembly referenziati durante l'aggiunta della migrazione
// Shared.dll
namespace Shared
{
// Shared POCO
class Hero
{
public string Name { get; set; }
public string Description { get; set; }
}
class MyDbContext : DbContext
{
public virtual DbSet<Hero> Heroes { get; set; }
}
internal sealed class MyDbContextConfiguration : DbMigrationsConfiguration<MyDbContext>
{
public MyDbContextConfiguration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\MyDbContext";
ContextKey = "Shared";
}
}
}
// Game.dll <- references Shared.dll
namespace Game
{
// Individual POCO
class Mission
{
public string Name { get; set; }
public virtual ICollection<Hero> Protagonists { get; set; }
}
class MyDbContext : DbContext
{
public virtual DbSet<Mission> Missions { get; set; }
}
internal sealed class MyDbContextConfiguration : DbMigrationsConfiguration<MyDbContext>
{
public MyDbContextConfiguration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\MyDbContext";
ContextKey = "Game";
}
}
}
Il problema è che quando ho Hero
POCO riferimento nel Game.dll modello di assieme attraverso ICollection<Hero> Protagonists
proprietà di navigazione, chiamando:
add-migration Test -ProjectName:Game -ConfigurationTypeName MyDbContextConfiguration -StartUpProjectName Main
finisce nella creazione DbMigration che include le modifiche per l'entità Hero
dal gruppo di riferimento Shared.dll condiviso.
public partial class Test : DbMigration
{
public override void Up()
{
AddColumn("shared.Heroes", "Name", c => c.String());
AddColumn("shared.Heroes", "Description", c => c.String());
...
Come posso limitare add-migration
al monitoraggio dei cambiamenti solo per entità situate nel gruppo in cui è stato definito il DbContext? In altre parole, quando si esegue add-migration
in Games.dll Voglio ignorare tutte le modifiche apportate alle entità da Shared.dll.
Ciò che potrebbe funzionare sarebbe anche la possibilità di limitare per schema di namespace o di database. Non voglio che vengano apportate modifiche alle entità situate negli assembly di riferimento da includere nelle migrazioni, poiché tutte le migrazioni vengono mantenute per ogni assembly.