Mam projekt, w którym moja domena jest podzielona między kilka oddzielnych złożeń i DbContexts, wszystkie używające tej samej bazowej bazy danych Sql Server. Zespoły te nie odwołują się do siebie z jednym wyjątkiem - jest taki, który zawiera to, co można nazwać współdzielonych jednostek, które są wspólne dla wszystkich innych domen i czasami określane jako właściwości nawigacyjne. Uproszczony przykład:Ignorowanie elementów z odwołanych złożeń podczas dodawania migracji
// 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";
}
}
}
Problem polega na tym, że kiedy mam Hero
POCO mowa w Game.dll modelu złożenia przez ICollection<Hero> Protagonists
właściwości nawigacyjnych, nazywając:
add-migration Test -ProjectName:Game -ConfigurationTypeName MyDbContextConfiguration -StartUpProjectName Main
kończy się w tworzeniu DbMigration że zawiera zmiany dla jednostki Hero
z zadeklarowanego zestawu Shared.dll.
public partial class Test : DbMigration
{
public override void Up()
{
AddColumn("shared.Heroes", "Name", c => c.String());
AddColumn("shared.Heroes", "Description", c => c.String());
...
Jak mogę ograniczyć add-migration
do monitorowania zmian tylko dla podmiotów znajdujących się w zespole, gdzie DbContext został zdefiniowany? Innymi słowy, po uruchomieniu add-migration
przeciwko Games.dll Chcę zignorować wszelkie zmiany dokonane w jednostkach z Shared.dll.
To, co może również działać, to możliwość ograniczenia przez przestrzeń nazw lub schemat obiektów bazy danych. Po prostu nie chcę, aby zmiany w elementach znajdujących się w zestawach referencyjnych zostały uwzględnione w moich migracjach, ponieważ wszystkie migracje są zachowywane w ramach zestawu.