Frage

Angesichts dieser Klassen wird dies (nach Konvention) zuerst EF 4.1-Code (nach Konvent) einer vielen zu viele Beziehung zwischen Seite und Tag überlassen:

public interface ITaggable
{
  ICollection<Tag> { get; set; }
}

public class Page : ITaggable
{
  public virtual ICollection<Tag> { get; set; }
}

public class Tag
{
  public virtual ICollection<Page> { get; set; }
}

Da ich eine Reihe anderer Klassen habe, implementieren Sie die ITaggable Ich müsste all diese Sammlungen hinzufügen Tag:

public class Tag
{
  public virtual ICollection<Page> { get; set; }
  public virtual ICollection<Post> { get; set; }
  public virtual ICollection<Event> { get; set; }
  ...
}

Wenn ich diese Eigenschaften auslasse Tag EF generiert eine 1-zu-Viele-Beziehung. Gibt es eine Möglichkeit, das auszulassen? ICollection<T> an Tag und überhaupt eine viel-zu-Viele-Beziehung bekommen?

(Anmerkung: ICollection<ITaggable> an Tag funktioniert nicht.)

War es hilfreich?

Lösung

Sie müssen fließende Zuordnung verwenden:

public interface ITaggable
{
  ICollection<Tag> { get; set; }
}

public class Page : ITaggable
{
    ...
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    ...
}

public class Context : DbContext
{
    public DbSet<Tag> Tags { get; set; }
    public DbSet<Page> Pages { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Page>()
                    .HasMany(p => p.Tags)
                    .WithMany();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top