映射多对多关系,没有导航属性

时间:2013-05-23 16:01:58

标签: ef-code-first entity-framework-5

是否可以映射多对多的关系而不在其中一个端点上有导航属性?例如,我有一些小部件和一些可以为特定小部件加注星标的用户。我希望能够看到用户关注哪些小部件明星,但我并不真正关心所有已经为某个特定小部件加星标的用户

Widget.cs

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

User.cs

public int Id { get; set; }
public string Username { get; set; }
public ICollection<Widget> StarredWidgets { get; set; }

通过此设置,EF将生成从窗口小部件到用户的一对多关系。但是,它需要是多对多的。我意识到我可以向public ICollection<User> Users添加Widget.cs,但只是看看是否还有另外一种方法。

1 个答案:

答案 0 :(得分:32)

您可以和本案例必须定义与Fluent API的多对多关系:

modelBuilder.Entity<User>()
    .HasMany(u => u.StarredWidgets)
    .WithMany() // <- no parameter here because there is no navigation property
    .Map(m =>
    {
        m.MapLeftKey("UserId");
        m.MapRightKey("WidgetId");
        m.ToTable("UserWidgets");
    });