Отношения многие ко многим с EF Code First и несколькими схемами - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать структуру БД, используя несколько схем.Сейчас я нахожусь в точке, где мне нужно связать свою таблицу User (схема аутентификации) с моей таблицей TrafficArea (схема активов).Однако при генерации миграций он пытается создать таблицу User в схеме активов.

На данный момент я настроил следующее

AssetsContext.cs - OnModelCreating ()

modelBuilder.HasDefaultSchema("assets");

modelBuilder.Entity<TrafficArea>()
.HasMany(tm => tm.TransportManagers) // This is ICollection<User>
.WithMany(u => u.TrafficAreas)
.Map(tatm =>
{
    tatm.MapLeftKey("TrafficAreaId");
    tatm.MapRightKey("UserId");
    tatm.ToTable("TrafficAreaTransportManagers", "assets");
});

AuthenticationContext.cs - OnModelCreating ()

modelBuilder.HasDefaultSchema("authentication");

При запуске миграции я получаю следующую попытку запуска

CreateTable(
"assets.User",
c => new
{
    Id = c.Guid(nullable: false),
    Email = c.String(),
    etc...
})
.PrimaryKey(t => t.Id);

CreateTable(
"assets.TrafficAreaTransportManagers",
c => new
{
    TrafficAreaId = c.Guid(nullable: false),
    UserId = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.TrafficAreaId, t.UserId })
.ForeignKey("assets.TrafficArea", t => t.TrafficAreaId, cascadeDelete: true)
.ForeignKey("assets.User", t => t.UserId, cascadeDelete: true)
.Index(t => t.TrafficAreaId)
.Index(t => t.UserId);

Как убедиться, что таблица User не воссоздана в схеме активов.

Я попытался вручную изменить сценарий миграции, чтобы он указывал на таблицу authentication.User, например:

CreateTable(
"assets.TrafficAreaTransportManagers",
c => new
{
    TrafficAreaId = c.Guid(nullable: false),
    UserId = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.TrafficAreaId, t.UserId })
.ForeignKey("assets.TrafficArea", t => t.TrafficAreaId, cascadeDelete: true)
.Index(t => t.TrafficAreaId)
.Index(t => t.UserId);

AddForeignKey("assets.TrafficAreaTransportManagers", "UserId", "authentication.User", "Id");

, но это ошибки во время выполнения:

enter image description here

...