Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Entity Framework associated table

Îåêßíçóå áðü ôï ìÝëïò StrouMfios. Τελευταία δημοσίευση από το μέλος StrouMfios στις 13-04-2009, 22:45. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-04-2009, 18:44 50041

    Entity Framework associated table

    Προσπαθώ να κάνω ενα απλο query με Linq αλλα δεν τα καταφέρνω. Θα χαιρόμουν αν μπορούσε κάποιος να με βοηθήσει.

    Πως μπορώ αυτό το απλό query σε T-sql να το κάνω με Linq για το EDM?
    select p.ProductID,c.Name,p.Name,p.Description
    from products p
    inner join Categories c on p.CategoryID = c.CategoryID

      Products                          
    (PK) ProductID
    (FK) CategoryID
           Name                                 
           Description

     Categories
    (PK) CategoryID
           Name

                           Products
    ProductID | CategoryID | Name | Description
    1                10               Foo       FooDesc  

            Categories
    CategoryID | Name
    10                FooCat


    Νόμιζα πως αν φέρω τα products απο την στιγμή που υπάρχει συσχέτιση με τον πίνακα categories θα μπορούσα να δώ και τα data απο τον categories.

    έτρεξα αυτό αλλά το categories ήταν null. Οπότε θεώρησα οτι υπάρχει lazy Loading.
    dbObjectContext db = new dbObjectContext();
    return db.Products.First(c => c.ProductID == 20);

    Προσπάθησα να δημιουργήσω ενα query me Join αλλα κα πάλι...ατύχησα.!!
    Τι κάνω λάθος ?!?!




    αν δεν το θες, www.antallakseto.gr
  •  12-04-2009, 22:32 50046 σε απάντηση της 50041

    Απ: Entity Framework associated table

    Τελικά σωστά θεώρησα οτι υπάρχει Lazy Loading ,

    αυτο
    return db.Products.First(c => c.ProductID == 20);

    δέν είναι λάθος αλλα για να "φέρει" και τα data απο τον πίνακα categories πρέπει να του το πούμε.
    Η λύση ειναι αυτή

    Products products = db.Products.First(c => c.ProductID == id);
    products.CategoriesReference.Load();
    return products;



    αν δεν το θες, www.antallakseto.gr
  •  13-04-2009, 00:52 50049 σε απάντηση της 50046

    Απ: Entity Framework associated table

    ή αλλιώς το παρακάτω, το οποίο φαίρνει τα ίδια πράγματα "χτυπώντας" μια φορά τη βάση.

    Products products = db.Products.Include("Categories").First(c => c.ProductID == id);
    return products;

    Κανένα όμως από τα δυο δεν φέρνει αυτός ακριβώς που ζήτησες αρχικά. Ακριβώς αυτό είναι το παρακάτω:

    var productsWithCategories = from p in db.Products where p.ProductID==id select p.ProductID,p.Categories.Name,p.Name,p.Description

    Μικρή σημείωση: Δεν μου αρέσει που ονομάζει db την μεταβλητή που του context.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  13-04-2009, 12:34 50055 σε απάντηση της 50049

    Απ: Entity Framework associated table

    Ευχαριστώ Δημήτρη για την απάντηση σου, θα χρησιμοποιήσω τελικά αυτο
    Products products = db.Products.Include("Categories").First(c => c.ProductID == id);
    return products;
    γιατι με βολεύει περισσότερο η επιστροφή να είναι τύπου "Products".

    Υπάρχει όμως τρόπος ώστε  αυτό να το κάνω cast σε Products? Το δοκίμασα αλλα "σκάει" (και πολυ καλά κάνει δλδ Smile ) .
    var productsWithCat = from p in db.Products
    where p.ProductID == id
    select new {
    p.ProductID, p.Title, p.Categories.CategoryID
    };
    return (Products)
    productsWithCat;


    αν δεν το θες, www.antallakseto.gr
  •  13-04-2009, 13:11 50056 σε απάντηση της 50055

    Απ: Entity Framework associated table

    StrouMfios:
    Ευχαριστώ Δημήτρη για την απάντηση σου, θα χρησιμοποιήσω τελικά αυτο
    Products products = db.Products.Include("Categories").First(c => c.ProductID == id);
    return products;

    γιατι με βολεύει περισσότερο η επιστροφή να είναι τύπου "Products".

    Νομίζω ότι το παραπάνω θα φέρει πρώτα όλα τα products και μετά θα εφαρμόσει το κριτήριο. Θα προτιμούσα αυτό:

    Products products = db.Products.Include("Categories").Where(c => c.ProductID == id).First();
    return products;

    StrouMfios:


    Υπάρχει όμως τρόπος ώστε  αυτό να το κάνω cast σε Products? Το δοκίμασα αλλα "σκάει" (και πολυ καλά κάνει δλδ Smile ) .
    var productsWithCat = from p in db.Products
                          where p.ProductID == id
                          select new {
                                      p.ProductID, p.Title, p.Categories.CategoryID
                                     };
    return (Products)
    productsWithCat;

    var productsWithCat = from p in db.Products
                          where p.ProductID == id
                          select new {
                                      p, p.Categories.CategoryID
                                     };

    έτσι θα έχεις και το Product ολόκληρο και το CategoryID (μια παροιμία μου θυμίζει αυτό!)

    Σε κάθε περίπτωση το return value της συνάρτησής σου δεν μπορεί να είναι Products.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  13-04-2009, 22:45 50078 σε απάντηση της 50056

    Απ: Entity Framework associated table

    Χμμμμ... Απλά τέλεια..

    Tnx Δημήτρη, μάλλον θα σε ξαναχρειαστώ.

    Αλλα αχρείαστος να είσαι Wink

    αν δεν το θες, www.antallakseto.gr
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems