Einer von Vielen mit einer join-Tabelle und eine optionale Beziehung im Entity Framework 4.1 Fluent-API

Wieder mit einem legacy-Datenbank können nicht geändert werden und mit Entity Framework 4.1 mit der Fluent-API zum Lesen von Daten.

public class Client
{
  [Key]
  public int ClientID { get; set; }
  public string Name { get; set ;}

  public virtual ICollection<Phone> Phones { get; set; }
}

public class Phone
{
  [Key]
  public int PhoneID { get; set; }
  public string Number { get; set; }

  public virtual Client Client { get; set; }
}

public class ClientPhone
{
  [Key]
  [Column(Order=0)]
  public int ClientID { get; set; }

  [Key]
  [Column(Order=1)]
  public int PhoneID { get; set; }
}

Ich will, dass die Kunden zu haben, viele Handys, aber die Telefone haben sollte nur eine optionale Client.
Hinweis: die Telefone sollten nur 0/1 Client. Ich will NICHT eine viele zu viele.
Also habe ich versucht, die folgenden:

modelBuilder.Entity<Client>()
  .HasMany(c => c.Phones)
  .WithOptional(p => p.Client)
  .Map(m =>
    {
      m.MapKey("ClientID");
      m.ToTable("ClientPhone");
    });

modelBuilder.Entity<Phone>()
  .HasOptional(p => p.Client)
  .WithMany(c => c.Phones)
  .Map(m =>
    {
      m.MapKey("PhoneID");
      m.ToTable("ClientPhone");
    });

Habe ich versucht, ein paar von Permutationen in der Regel immer eine Fehlermeldung über "Jede Eigenschaft name in einem Typ eindeutig sein müssen."

Danke für die Hilfe.

EDIT MIT ANTWORT

Hier sind die änderungen, die ich gemacht, um die entity-Klassen. Es ist möglich, zu navigieren aus ein Client zu viele Handys und von einem Telefon zu einem Kunden, aber Sie müssen gehen Sie durch die ClientPhone join-Tabelle.

[Table("Client")]
public class Client
{
  [Key]
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int ClientID { get; set; }

  public string Name { get; set ;}

  public virtual ICollection<Phone> Phones { get; set; } //Client has * Phones
}

[Table("Phone")]
public class Phone
{
  [Key]
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int PhoneID { get; set; }

  public string Number { get; set; }

  public virtual Client Client { get; set; } //Phone has 0|1 Client
}

[Table("ClientPhone")]
public class ClientPhone
{
  //Removed the Key attribute
  public int ClientID { get; set; }

  [Key] //Left the Key on the 0|1 side
  [ForeignKey("Phone")]
  public int PhoneID { get; set; }

  public virtual Client Client { get; set; } //One Client
  public virtual Phone Phone { get; set; } //One Phone
}
  • Wie sind deine Tabellen definiert? Welche Tabellen hast du in der Datenbank und welche Beziehungen konfiguriert sind? Wenn Datenbank enthält eine viele-zu-viele-und junction-Tabelle, die Sie nicht zuordnen kann, es als eins-zu-viele.
Schreibe einen Kommentar