When you are implementing many to many relations in SQL, in the case of using entity framework code fist you must use Icollection<> or Ilist<> of an entity. Imagine that you have this classes, an Author class which has a collection of books
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public ICollection<Books> Books { get; set; } }
And the Books which has a collection of Authors
public class Books { public int Id { get; set; } public string Title { get; set; } public ICollection<Author> Authors { get; set; } }
And this is your context class
public class ContextClass : DbContext { public DbSet<Books> Books { get; set; } public DbSet<Author> Authors { get; set; } }
If you want you to create a repository class, to get the books by authors Id, You should act like this
public class Repository { private ContextClass _contextClass = new ContextClass(); public IEnumerable<Books> FindBookByAuthor(int authorId) { var query = _contextClass.Books.Where(b => b.Authors.Any(a => a.Id == authorId)); return query.ToList(); } }
In the lambda expression, you have to use any(), because you have a collection of authors in book class. That's all!