Entity Framework Viele, zu Viele Werke Beinhalten aber nicht

Habe ich ein typisches " viele-zu-viele-Beziehung mit diesen 3 Tabellen

[Post] (
  [PostId] int, (PK)
  [Content] nvarchar(max)
   ...
)

[Tag] (
  [TagId] int, (PK)
  [Name] nvarchar
  ...
)

[TagPost] (
  [TagId] int, (PK, FK)
  [PostId] int (PK, FK)
)

Und TagId und PostId, sind die PK-und FK-Satz auf die Tische entsprechend, etc. Dann habe ich diese Klassen und mapping in c#

public class Post {
    public Post()
    {
        this.Tags = new HashSet<Tag>();
    }

    [Key]
    public int PostId { get; set; }
    ...

    public virtual ICollection<Tag> Tags { get; private set; }
}

public class Tag {
    public Tag()
    {
        this.Posts = new HashSet<Post>();
    }

    [Key]
    public int TagId { get; set; }
    ...

    public virtual ICollection<Post> Posts { get; private set; }
}

internal class MyDbContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Post>().ToTable("Post");
        modelBuilder.Entity<Tag>().ToTable("Tag");

        modelBuilder.Entity<Post>()
            .HasMany(x => x.Tags)
            .WithMany(x => x.Posts)
        .Map(x =>
        {
            x.ToTable("TagPost");
            x.MapLeftKey("PostId");
            x.MapRightKey("TagId");
        });
    }

Dann habe ich das code-Abfrage, Sie

var list = (from p in ctx.Posts.Include(p => p.Tags)
            from t in p.Tags
            where ... //some of my filter conditions
            select p).ToList();

Diese Verknüpfung wird zurückkehren, die Beiträge, die ich suchte, aber die zurückgegebenen Beiträge nicht den entsprechenden tags ausgefüllt, obwohl ich die Enthalten es. Könnte mir jemand helfen auf was mir fehlt, damit ich die tags auch wieder mit den posts?

Vielen Dank.

InformationsquelleAutor Ray | 2013-03-21
Schreibe einen Kommentar