开发者

Many-To-Many Relationship in Code-First EF4

开发者 https://www.devze.com 2023-01-05 01:29 出处:网络
How do you represent a many-to-many relationship in the EF4 Code-First CTP3? For example i开发者_运维问答f I have the following classes:

How do you represent a many-to-many relationship in the EF4 Code-First CTP3?

For example i开发者_运维问答f I have the following classes:

class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Profile> Profiles { get; set; }
}

class Profile
{
    public int Id { get; set; }
    public string Name { get; set; }
}

In the database there is a UserProfiles table that has the FK for User and FK for Profile. How can I map this?

EDIT: I understand how to to currently map with having a ICollection<User> property on the Profile, but I really don't want to have a an opposite navigation property when it should be "Users have many profiles".


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消