5

J'ai deux entités avec plusieurs à plusieurs comme ceci:EF 4.1 RC Beaucoup à plusieurs dans les EF CF

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

} 

et j'ai une table intermédiaire nommée Bookauthor définie comme ceci:

BookAuthor: int 
    int AuthorID 
    int BookID 

Comment mapper ceci en utilisant FluentAPI

Merci !!

Répondre

8

C'était problématique EDMX mais avec EF 4.1 API couramment vous pouvez mappez:

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

Comme vous pouvez le voir, je ne pas mapper la colonne BookAuthor. Cette colonne est inconnue à EF et doit être incrémentée automatiquement.

Cela ne peut évidemment pas fonctionner avec une approche de code d'abord, mais seulement si vous utilisez l'API Fluent par rapport à la base de données existante.

+0

Merci! Ça marche maintenant! –

+0

cela fonctionne? vraiment? avec quelle condition? 4.1 ne se soucie pas de l'override OnModelCreating. Je vis vraiment le choc. ToTable ("BookAuthor") ne crée pas de table appelée par BookAuthor. –

0

Je ne pense pas que EF vous permet d'avoir un Id distinct dans les tables de jonction many-to-many.

L'alternative consiste simplement à mapper BookAuthor en tant qu'entité.

Sur une note côté, NHibernate prend en charge cette construction en utilisant un idbag