I have two entities with many to many relationship like this:
class author
{
public int AuthorID{get;set;}
public string Name{get;set;}
public virtual ICollection<book> books{get;set;}
}
class book
{
public int BookID{get;set;}
public string Name{get;set;}
public virtual ICollection<author> authors{get;set;}
}
and I have an intermediate table named Bookauthor defined like this:
BookAuthor: int
int AuthorID
int BookID
How to map this using FluentAPI
Thanks!!
This was problematic with EDMX but with EF 4.1 fluent API you can map it:
modelBuilder.Entity<book>()
.HasMany(b => b.authors)
.WithMany(a => a.books)
.Map(m => m.MapLeftKey("BookID")
.MapRightKey("AuthorID")
.ToTable("BookAuthor"));
As you can see I don't map BookAuthor
column. That column is unknown to EF and must be auto incremented.
This obviously can't work with a Code-first approach but only if you use Fluent API against existing database.
I don't think EF allows you to have a separate Id in many-to-many junction tables.
The alternative is just mapping BookAuthor as an entity.
On a side note, NHibernate supports this construct using an idbag