2012-11-29 14 views
7

sto definendo alcuni dei miei modelli atm utilizzando EF5 Code First. Ho questi tre classi di esempio con una relazione molti-a-molti:Relazioni molti-a-molti in Breeze

public class Team 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Team_Id { get; set; } 
     [MaxLength(150)] 
     public string TeamName { get; set; } 

     public virtual ICollection<User> Users { get; set; } 
     [public virtual ICollection<Role> Roles { get; set; } // 1 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

public class User 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int User_Id { get; set; } 
     [MaxLength(150)] 
     public string LoginName { get; set; } 
     [MaxLength(150)] 
     public string Nachname { get; set; } 
     [MaxLength(150)]   
     public string Vorname { get; set; } 

     public virtual ICollection<Team> Teams { get; set; } 
     public virtual ICollection<Role> Roles { get; set; } // 2 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

public class Role 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Role_Id { get; set; } 
     [MaxLength(50)] 
     public string RoleName { get; set; } 

     [Timestamp] 
     public byte[] TimeStamp { get; set; } 
    } 

Come potete vedere c'è una relazione molti-a-molti tra i team e utenti. Sto cercando di farlo funzionare per ore. Ricevo sempre un'eccezione JS con il messaggio di errore "Proprietà errate del nav" in VS 2012. All'inizio ho pensato che fossero gli ICollection Team/Utenti nella classe Utenti/Teams ma non lo era. Il problema sembra essere le due chiamate 1) e 2). Se rimuovo uno di loro funziona. Rinominare uno e mantenendo entrambi i campi attivi genera ancora l'errore. Forse qualcuno ha un'idea cosa sta succedendo.

Molte grazie

Questa domanda è stato pubblicato da SirSmackalot sui nostri IdeaBlade forum. Sto ripubblicando la domanda e la risposta qui poiché penso che sarà utile alla comunità Breeze Stack Overflow.

risposta

14

Breeze non supporta ancora le relazioni molti-a-molti in cui la tabella di mapping è nascosta. Il problema è che Breeze dipende da un concetto di "chiave esterna" per tenere traccia delle relazioni, e questo non è disponibile per le relazioni molti-a-molti definite senza carico utile in Entity Framework.

Ciò che funziona è modificare la relazione molti-a-molti in due relazioni 1-a-molti con un'entità di collegamento. Fondamentalmente, basta esporre la tabella di mappatura come un altro tipo di entità. Per esempio:

Team - TeamUser (1-a-molti)

utente - TeamUser (1-a-molti)

Abbiamo intenzione di sostenere di Entity Framework ufficiale molti-a-molti relazione in una versione successiva, ma dobbiamo dare la priorità a questo. Quindi, per favore aggiungi/vota questa richiesta di funzionalità usando il meccanismo di feedback sul sito web (https://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions/filters/top). Questo ci aiuta a decidere quali funzionalità mettere a fuoco in seguito.

+7

Consiglio alle persone di evitare implementazioni molti-a-molti. Il concetto è buono ma in pratica quasi cade a pezzi. Nella mia esperienza, la tabella di mappatura alla fine acquisisce una colonna. Forse è un link-date o userId o qualche altro fatto che descrive come le due parti si sono unite. Nel momento in cui aggiungo quel "carico utile", i molti-a-molti cadono a pezzi e devo rendere esplicita l'entità di mappatura/collegamento. Devo strapazzare per rintracciare tutto il codice che dipende dal codice m-to-m ... che può essere difficile da trovare. Vorrei sempre aver creato loro un'entità di mappatura 1-to-m + in primo luogo. – Ward

+0

come apparirebbe una query in brezza con tale entità di collegamento per ottenere tutti gli utenti da una squadra? – daniel

+3

Ancora niente su questo? – Adaptabi