【问题标题】:EF 4.1 RC Many to many relationship in EF CFEF 4.1 RC EF CF 中的多对多关系
【发布时间】:2011-07-30 12:27:13
【问题描述】:

我有两个具有多对多关系的实体,如下所示:

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;}

}

我有一个名为 Bookauthor 的中间表,定义如下:

  BookAuthor: int
  int AuthorID
  int BookID

如何使用 FluentAPI 进行映射

谢谢!!

【问题讨论】:

    标签: entity-framework mapping many-to-many entity-framework-4.1 fluent-interface


    【解决方案1】:

    这对 EDMX 来说是个问题,但使用 EF 4.1 fluent API 您可以映射它

    modelBuilder.Entity<book>()
                .HasMany(b => b.authors)
                .WithMany(a => a.books)
                .Map(m => m.MapLeftKey("BookID")
                       .MapRightKey("AuthorID")
                       .ToTable("BookAuthor"));
    

    如您所见,我没有映射BookAuthor 列。 EF 不知道该列,必须自动递增。

    这显然不适用于代码优先方法,但前提是您对现有数据库使用 Fluent API。

    【讨论】:

    • 它工作了吗?真的吗?有什么条件? 4.1 不关心 OnModelCreating 覆盖。我真的很震惊。 ToTable("BookAuthor") 不会创建由 BookAuthor 调用的表。
    【解决方案2】:

    我认为 EF 不允许您在多对多联结表中拥有单独的 Id。

    另一种方法是将 BookAuthor 映射为实体。

    附带说明,NHibernate 使用 idbag 支持此构造

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多