2016-05-20 12 views
0

Ich habe da zwei Entitäten zwei sind normal die andere ist Mapping zwischen einander jedes Mal, wenn ich Navigation Zuordnung auf Ich bekomme ungültige Objektnamen. Wenn ich versuche und map ich bekomme Tabelle bereits im Schema.EF4.3 viele bis viele Tabelle als Entität

EntityA EntityB  EntityC 
Id  Id    EntityA has FK} PrimaryKey 
Name description EntityB has FK} 

Die Mapping-Klassen Ich habe alle Navigation auf Entität genommen, die meine Probleme und Unternehmen verursacht danach

versucht

ich diese ID in Einheit c versucht bekam aber immer noch ungültige Namenstabelle. der Name es versuchte, war zu erstellen dbo.BA, wo die eigentliche Tabelle ist dbo.tblAB

//entity.HasRequired(p => p.A).WithMany(p => p.C).HasForeignKey(p => p.EntityA); 
//entity.HasRequired(p => p.B).WithMany(p => p.C).HasForeignKey(p => p.EntityB) 

Ich kann die .map verwenden, weil ich die alle drei Einheiten mit in den DAL Mapping Klassen Entity verwenden müssen C

entity.HasKey(t => new {t.EntityA, t.EntityB}); 
      entity.Property(qa => qa.EntityA).IsRequired(); 
      entity.Property(qa => qa.EntityB.).IsRequired(); 
      entity.toTable("tblC) 

das war ausgehende Tabelle und weil wir diese Datensätze löschen müssen wir über die Entität tun. Entity B und Entity A haben ICollection Eigenschaften zu Entity C und Kartierung von

In Entity A Mapping

entity.HasMany(g => g.C).WithRequired().HasForeignKey(p => p.EntityA).WillCascadeOnDelete(false); 

In Entität B Mapping

entity.HasMany(g => g.C).WithRequired().HasForeignKey(p => p.EntityB).WillCascadeOnDelete(false); 

In Entität C Mapping

entity.Property(t => t.EntityA).HasColumnName("EntityA"); 
      entity.Property(t => t.EntityB).HasColumnName("EntityB"); 
      entity.Map(c => c.ToTable("tblC")).HasKey(t => new { t.EntityA, t.EntityB });* 

Ich bekam einen Multiplikationsfehler, aber jetzt bekomme ich Invalid c Spaltenname 'EntityC_EntityA'. Ungültiger Spaltenname 'EntityC_EntityB'


UPDATE Ich habe nun das Schema mit In EntityC

[Key, Column(Order = 0), ForeignKey("EntityA")] 
[Key, Column(Order = 1), ForeignKey("EntityB")) 

Navigaton Eigenschaften

[ForeignKey("Id")] 
public virtual EntityA EntityA { get; set; } 
[ForeignKey("Id")] 
public virtual EntityB EntityB { get; set; } 

Mapping

entity.HasMany(g => g.Cs).WithRequired(p=>p.EntityA).HasForeignKey(p => p.EntityA).WillCascadeOnDelete(false); 
entity.HasMany(g => g.Cs).WithRequired(p=>p.EntityB).HasForeignKey(p => p.EntityB).WillCascadeOnDelete(false); 
in der Entität A und B fixiert 10

Das Problem wissen, dass die Abfrage versucht, die Tabelle db.BA zu erstellen. Die Abfrage ich versucht habe, ist

ctx.EntityAs.Include(p => p.Cs.Select(pr => pr.EntityB)) 
     .Include(p => p.EntityBs.Select(pr => pr.Cs.Select(ps => ps.EntityA))) 
+0

Es ist kein Duplikat zu schließen, weil ich muß behalte die Entität und verwende nicht die Map-Funktion – user551445

+0

Wie markiere ich dich als richtig, danke deine Hilfe hab schon anderthalb probiert, um das sortiert – user551445

+0

Ich habe es getan sag jetzt ich komme genial Ich habe die Spaltennamen eingestellt Ungültiger Spaltenname "C_EntityA". und C_EntityB – user551445

Antwort

0

Ich möchte Gert Arnold danken für in der Schreibrichtung setzen.Die Antwort für das Schema in der Frage ist Die Linq der viele zu lösen, ist EntityC mit einer Auswahl auf B oder A

entityA.Include(p => p.Cs.Select(pr => pr.EntityA)) 

oder

entityB.Include(p => p.Cs.Select(pr => pr.EntityB)) 
+0

Ich habe ein anderes Problem, das jetzt ahs gebrochen andere Teile von Dal, wo EntityA und EntityB haben eine eins zu eins Relatioship – user551445

+0

Fixed A viele zu viele Zuordnung ohne die Karte mit EntityA und Zuordnung von Entität B – user551445