2017-05-14 2 views
0

Ich habe nicht in der Lage gewesen, eine Antwort auf dieses spezifische Problem zu finden, vielleicht zu meiner Neuheit mit Entity FrameworkEF 6 Fluent API mit einer zu viele, und viele, viele und widersprüchlichen Multiplizitäten

Ich habe zwei Entitäten: User und Einrichtung.

Die Facility-Tabelle erfordert einen Eigentümer (Benutzer), aber einer Einrichtung können auch viele "FacilityUsers" einer Einrichtung zugewiesen werden.

public class User 
{ 
    .... 
    public virtual ICollection<Facility> Facilities { get; set; } 
} 

public Facility Facility 
{ 
    public Guid OwnerId { get; set; } 
    ... 
    public virtual User Owner { get; set; } 
    public virtual ICollection<User> FacilityUsers { get; set; } 
} 

Hier ist meine Modelbuilder

////Many To Many: Users To Facilities 
modelBuilder.Entity<User>() 
    .HasMany(i => i.Facilities) 
    .WithMany(u => u.FacilityUsers) 
    .Map(m => 
    { 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("FacilityId"); 
     m.ToTable("UserFacility"); 
    });   

//One to Many: Facility To Owner 
modelBuilder.Entity<Facility>() 
    .HasRequired<User>(s => s.Owner) 
    .WithMany(s => s.Facilities) 
    .HasForeignKey(k => k.OwnerId); 

Das Problem ist, wenn ich die Karte Facility Besitzer haben, bekomme ich folgende Fehlermeldung: Die Navigationseigenschaft ‚FacilityUsers‘ erklärt vom Typ ' MEH.Web.Models.Entities.Facility 'wurde mit widersprüchlichen Multiplizitäten konfiguriert.

Allerdings, wenn ich die Einrichtung zu Owner Zuordnung ausschließen, funktioniert es.

//One to Many: Facility To Owner 
//modelBuilder.Entity<Facility>() 
// .HasRequired<User>(s => s.Owner) 
// .WithMany(s => s.Facilities) 
// .HasForeignKey(k => k.OwnerId); 

Das Problem ist, hat die Einrichtungen Tabelle dann ein Owner_UserId Feld, das null ist, aber die ownerID korrekt ausgefüllt ist. Mein OCD lässt mich nicht bewegen, bis ich beschlossen haben das "Owner_UserId" Problem.

Danke, D

Antwort

1

Sie nicht eine Sammlung Navigationseigenschaft (Facilities) zu zwei Beziehungen abbilden können.

Entweder eine weitere Sammlung für one-to-many Beziehung hinzufügen:

public class User 
{ 
    .... 
    public virtual ICollection<Facility> Facilities { get; set; } 
    public virtual ICollection<Facility> OwnedFacilities { get; set; } 
} 

und Karte zeigen:

//One to Many: Facility To Owner 
modelBuilder.Entity<Facility>() 
    .HasRequired(s => s.Owner) 
    .WithMany(s => s.OwnedFacilities) // <- another collection 
    .HasForeignKey(k => k.OwnerId); 

oder halten das User Modell, wie es jetzt ist, aber konfigurieren one-to-many Beziehung als unidirektionale (ohne Sammlung Navigationseigenschaft):

//One to Many: Facility To Owner 
modelBuilder.Entity<Facility>() 
    .HasRequired(s => s.Owner) 
    .WithMany() // <- no collection 
    .HasForeignKey(k => k.OwnerId); 
+0

Vielen Dank !!! Ich musste **. WillCascadeOnDelete (false) ** hinzufügen. –

Verwandte Themen