Ich habe einige EF-Code-First-Tabellen (eine, wenn sie ApplicationUser ist), und ich versuche, eine Migration zu erstellen, um eine Viele-zu-Viele-Beziehung hinzuzufügen.Warum generiert EF Migrations nicht die richtige Viele-zu-Viele-Beziehung?
public class ApplicationUser : IdentityUser
{
// many properties, not relevant here
// NEW RELATIONSHIP
public virtual ICollection<Trip> Trips { get; set; } = new HashSet<Trip>();
}
public class Trip
{
// again, many properties
public string ClientId { get; set; }
[ForeignKey(nameof(ClientId))]
public virtual ApplicationUser Client { get; set; }
public string PartnerId { get; set; }
[ForeignKey(nameof(PartnerId))]
public virtual ApplicationUser Partner { get; set; }
// NEW RELATIONSHIP
public virtual ICollection<ApplicationUser> OtherUsers { get; set; } = new HashSet<ApplicationUser>();
}
Hinweis gibt es bereits eine Beziehung statt (Trip hat zwei Fremdschlüssel in Richtung ApplicationUser, aber ich bin das Hinzufügen eines neuen
Wenn ich Add-Migration Trips
in der Konsole ausgeführt werden, dies erzeugt wird.
public partial class Trips : DbMigration
{
public override void Up()
{
AddColumn("dbo.AspNetUsers", "Trip_TripId", c => c.Int());
AddColumn("dbo.Trips", "ApplicationUser_Id", c => c.String(maxLength: 128));
CreateIndex("dbo.AspNetUsers", "Trip_TripId");
CreateIndex("dbo.Trips", "ApplicationUser_Id");
AddForeignKey("dbo.AspNetUsers", "Trip_TripId", "dbo.Trips", "TripId");
AddForeignKey("dbo.Trips", "ApplicationUser_Id", "dbo.AspNetUsers", "Id");
}
public override void Down()
{
DropForeignKey("dbo.Trips", "ApplicationUser_Id", "dbo.AspNetUsers");
DropForeignKey("dbo.AspNetUsers", "Trip_TripId", "dbo.Trips");
DropIndex("dbo.Trips", new[] { "ApplicationUser_Id" });
DropIndex("dbo.AspNetUsers", new[] { "Trip_TripId" });
DropColumn("dbo.Trips", "ApplicationUser_Id");
DropColumn("dbo.AspNetUsers", "Trip_TripId");
}
}
Warum ist es zwei eins-zu-viele-Beziehungen statt einer many-to-many zu schaffen? ich war eine dritte Tabelle erzeugt werden erwartet.
Ich habe das vorher ohne Probleme gemacht, aber ich weiß nicht, ob die Tatsache, dass ich bereits Fremdschlüssel habe, die Generation stört.
Ich habe gesehen, another answer, dass dies mit der Fluent-API löst, aber ich brauchte nie zuvor zu verwenden. Ist es wirklich die einzige Möglichkeit, es zu lösen? Was mache ich falsch?
Danke! Das hat wirklich für mich funktioniert. –
Ich bin immer noch neugierig, warum es es nicht automatisch erkennt, obwohl. –
Da es außerhalb der Konventionen liegt, erwarte ich, dass sie nicht raten wollen. Die Dinge könnten durch mehrere Beziehungen zwischen den Klassen verwirrt werden. Froh, dass es funktioniert hat! – Tone