Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C#] EntityFramework e tabelle relazione molti-a-molti

    Salve a tutti,

    vi sottopongo una questione...

    Ho le seguenti tabelle:

    codice:
    TabellaA
    { A_id, A_name, Attivo }
    
    TabellaB
    { B_id, B_name, Attivo }
    
    TabellaRelazioneAB
    { A_id, B_id }
    L'EntityFramework non crea la tabella di relazione nelle tabelle molti-a-molti in casi come quello sopra esposto.
    La mia esigenza è quella di popolare una ObservableCollection con una lista una lista di questo tipo (scrivo in sql per rendere la cosa comprensibile ai più):

    codice:
    SELECT 
    FROM TabellaRelazioneAB as AB
               LEFT JOIN TabellaA as A on AB.A_id = A.A_id
               LEFT JOIN TabellaB as B on AB.B_id = B.B_id
    WHERE AB.A_id = @Parametro1
    AND A.Attivo = 1
    AND B.Attivo = 1
    Qualcuno ha idea di come poter fare?

    Grazie
    ominoRoBy

  2. #2
    o magari... query ben molto più interessanti tipo questa
    (che è in realtà quella che mi serve realmente):

    codice:
    SELECT *
    FROM TabellaA
    WHERE A_id not in ( SELECT A_id FROM TabellaAB WHERE B_id = @parametro )
    grazie ancora.....
    ominoRoBy

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    non ho provato ma se non ho capito male ti serve qualcosa tipo questo in ef.

    codice:
    var query = ctx.TabellaA
                    .Where(a => a.TabllaB
                        .Where(b => b.ID == parametro).Count() == 0)
                    .Select(a => a.ID); //opzionale se ti servono solo gli id altrimenti .ToList()
    in questo modo ti seleziona tutti gli id di TabellaA che non sono associati allo specifico record di TabellaB.

    Se sei un patito delle performance e guardando sqlProfiler non sei soddisfatto puoi sempre scrivere una stored procedure direttamente in sqlserver, importare quella dal designer e usare la SP direttamente in EF.

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Ma per accedere ad un altra tabella non si utilizza .include ?

  5. #5
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Originariamente inviato da cassano
    Ma per accedere ad un altra tabella non si utilizza .include ?
    no. non quando stai facendo una query.

    Include si usa quando il LazyLoading è disativato e se si desidera che il risultato contenga anche un particolare set di entità correlate.

    Se nella query che ho postato io vuoi che le enity TabellaA del resulset contengano anche le collection TabellaB allora devi usare include. Non è una cosa legata alla possibilità di accedere ad un set di entità correlate durante la query.

  6. #6
    Credo di non essermi spiegato benissimo

    Comunque sia,
    ho risolto nel seguente modo (spero possa essere d'aiuto ad altri):

    codice:
    var query = Context.TabellaA.Where(x => x.Attivo == true &&
    !(x.TabellaB.Select(y => y.B_id).Contains(mioelementoserzionato.B_id))).ToList();
    
    foreach (TabellaA a in query)
    {
                myOB.Add(a);
    }
    Grazie per il supporto!!!
    ominoRoBy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.