0

Это довольно простая проблема, которая имеет довольно длинное объяснение, поэтому, пожалуйста, несите меня, если это будет длиться долго. (Я действительно собираюсь попробовать и держать его до минимума)Как определить EF Многие для многих Связь в типе, который имеет другие отношения с одним и тем же другим типом

Ok так вот мой «извлеченный образец», который производит ту же проблему ...

public class TestContext : DbContext 
{ 
    public DbSet<TypeA> TypeAs { get; set; } 
    public DbSet<TypeB> TypeBees { get; set; } 
} 

public class TypeA 
{ 
    [Key] 
    public int Id { get; set; } 
    public int SpecialBId { get; set; } 
    public virtual ICollection<TypeB> Bees { get; set; } 

    public virtual TypeB SpecialB { get; set; } 
} 

public class TypeB 
{ 
    [Key] 
    public int Id { get; set; } 

    public virtual ICollection<TypeA> Aaas { get; set; } 
} 

... так что я позволить EF Миграции запустите добавить миграцию, запустить обновление базы данных, и я получаю это ...

enter image description here

что я ожидал увидеть это присоединиться к таблице для многих ко многим, но по какой-то причине, что вторая ссылка «SpecialB» заставляет это разорвать многие на многие ссылки/переопределить его сом ehow.

Так что я понял, ну ладно ... может быть, это просто нужно вручную, так что я добавил onmodel создать в моем контексте ...

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<TypeA>().HasMany<TypeB>(i => i.Bees); 
     modelBuilder.Entity<TypeB>().HasMany<TypeA>(i => i.Aaas); 
    } 

Генерация миграции на данный момент ничего не производит.

Итак, как я могу получить эти отношения для правильной работы и создать правильную структуру db?

На всякий случай ...

Это то, что создает Ef при запуске добавить миграцию создать начальную миграцию для контекста дб выше типов, как определено:

public partial class Initial : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.TypeAs", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        SpecialBId = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.TypeBs", t => t.SpecialBId, cascadeDelete: true) 
      .Index(t => t.SpecialBId); 

     CreateTable(
      "dbo.TypeBs", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        TypeA_Id = c.Int(), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.TypeAs", t => t.TypeA_Id) 
      .Index(t => t.TypeA_Id); 

    } 

    public override void Down() 
    { 
     DropForeignKey("dbo.TypeAs", "SpecialBId", "dbo.TypeBs"); 
     DropForeignKey("dbo.TypeBs", "TypeA_Id", "dbo.TypeAs"); 
     DropIndex("dbo.TypeBs", new[] { "TypeA_Id" }); 
     DropIndex("dbo.TypeAs", new[] { "SpecialBId" }); 
     DropTable("dbo.TypeBs"); 
     DropTable("dbo.TypeAs"); 
    } 
} 

ответ

2

You необходимо добавить WithMany():

modelBuilder.Entity<TypeA>().HasMany<TypeB>(i => i.Bees).WithMany(); 
modelBuilder.Entity<TypeB>().HasMany<TypeA>(i => i.Aaas).WithMany(); 
+0

God like! ... добро пожаловать в SO @Josh – War

 Смежные вопросы

  • Нет связанных вопросов^_^