How do you represent a many-to-many relationship in the EF4 Code-First CTP3?
For example if I have the following classes:
class User
{
public int
EDIT: CTP4 was released late yesterday (July 14 2010) and there is now support for this:
modelBuilder.Entity<Post>().HasMany(p => p.Tags).WithMany();
I found out finally that this currently isn't possible. Microsoft is looking to add this feature (only one navigation property).
See this link on the MSDN forums for more information: http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/6920db2b-88c7-4bea-ac89-4809882cff8f
With many to many relationships you should include navigation properties on both sides and make them virtual (to utilize lazy loading)
class User
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Profile> Profiles { get; set; }
}
class Profile
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}
Then with that setup you can define your many to many relationship (you can also let entity framework do it for you but I don't like the naming conventions it uses.)
modelBuilder.Entity<Profile>().
HasMany(p => p.Users).
WithMany(g => g.Profiles).
Map(t => t.MapLeftKey("ProfileID")
.MapRightKey("UserID")
.ToTable("UserProfiles"));
This will give you a table named UserProfiles with UserID and ProfileID as Keys.