śledzę tego przykładu, który dostałam od http://ef.readthedocs.org/en/latest/modeling/relationships.htmlwiele-do-wielu zapytań w Entity Framework 7
class MyContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PostTag>()
.HasKey(t => new { t.PostId, t.TagId });
modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Post)
.WithMany(p => p.PostTags)
.HasForeignKey(pt => pt.PostId);
modelBuilder.Entity<PostTag>()
.HasOne(pt => pt.Tag)
.WithMany(t => t.PostTags)
.HasForeignKey(pt => pt.TagId);
}
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public List<PostTag> PostTags { get; set; }
}
public class Tag
{
public string TagId { get; set; }
public List<PostTag> PostTags { get; set; }
}
public class PostTag
{
public int PostId { get; set; }
public Post Post { get; set; }
public string TagId { get; set; }
public Tag Tag { get; set; }
}
Teraz moje pytanie brzmi, jak chciałbym skonstruować moje zapytanie, aby posty daną TagID? Coś jak:
public List<Post> GetPostsByTagId(int tagId)
{
//linq query here
}
Należy pamiętać, że jest to EF7.
Nie jestem pewien jak to działa, ponieważ jestem nowy w EF, ale to zapytanie stworzyło najbardziej wydajną instrukcję SQL: "PostTags INNER JOIN Posts ...", gdzie inne odpowiedzi spowodowały absolutnie horrendalną zagnieżdżoną instrukcję SELECTs: 'SELECT ze Posts WHERE (WYBIERZ PRZYPADEK, KIEDY ISTNIEJĄ (WYBIERZ 1 Z POSTTAG ...'Czy możesz wyjaśnić, co się dzieje? –
Pewnie, zaktualizowałem swoją odpowiedź – octavioccl