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

 

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

SQL Server Schemas & Entity Framework 4

Îåêßíçóå áðü ôï ìÝëïò Antonios Chatzipavlis. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 27-12-2010, 19:48. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-12-2010, 09:59 61779

    SQL Server Schemas & Entity Framework 4

    Καλημέρα σε όλους.

    Θέλω να κάνω μια ερώτηση γιατί όσο και έφαγα το λυσσακά μου δεν βρήκα μια απάντηση που να με ικανοποιεί.

    Έχω μια βάση σε SQL Server 2008 R2 στην οποία κάνω χρήση schemas. Έτσι έχω πχ ένα πίνακα στο SchemaA.Table1 και SchemaB.Table1. Όταν πάω να τους βάλω σε ένα EF Model στο φτιάχνει σαν Entity το Table1 & Table11, δηλαδή βάζει στο ένα στο τέλος έναν άσσο.

    Ξέρεις κανείς πως μπορεί αυτό μπορεί να αποφευχθεί και πως το EF4 μπορεί να καταλάβει τα schemas?

    Ευχαριστώ


    Antonios Chatzipavlis

  •  20-12-2010, 20:32 61791 σε απάντηση της 61779

    Απ: SQL Server Schemas & Entity Framework 4

    Ξέρεις κανείς πως μπορεί αυτό μπορεί να αποφευχθεί και πως το EF4 μπορεί να καταλάβει τα schemas?

    Ο model designer εχει καταλαβει τα διαφορετικα database schemas για αυτο και δημιουργησε δυο διαφορετικα entities. Αυτος αλλωστε ειναι κ ο κυριος σκοπος του entity framework : να παρεχει layer of abstraction στον τροπο μου διαχειριζεσαι τα δεδομενα και στον τροπο που ειναι αποθηκευμενα τα δεδομενα.

    The Entity Framework is a set of technologies in ADO.NET that support the development of data-oriented software applications. Architects and developers of data-oriented applications have struggled with the need to achieve two very different objectives. They must model the entities, relationships, and logic of the business problems they are solving, and they must also work with the data engines used to store and retrieve the data. The data may span multiple storage systems, each with its own protocols; even applications that work with a single storage system must balance the requirements of the storage system against the requirements of writing efficient and maintainable application code.

    The Entity Framework enables developers to work with data in the form of domain-specific objects and properties, such as customers and customer addresses, without having to concern themselves with the underlying database tables and columns where this data is stored. With the Entity Framework , developers can work at a higher level of abstraction when they deal with data, and can create and maintain data-oriented applications with less code than in traditional applications.

    The Entity Framework gives life to models by enabling developers to query entities and relationships in the domain model (called a conceptual model in the Entity Framework ) while relying on the Entity Framework to translate those operations to data source–specific commands. This frees applications from hard-coded dependencies on a particular data source.

    The storage model and mappings can change as needed without requiring changes to the conceptual model, data classes, or application code. Because storage models are provider-specific, you can work with a consistent conceptual model across various data sources.

    Conceptual model: Table1 ---/abstraction layer/---> storage model (SQL Server SchemaA.Table1)
    Conceptual model: Table11 ---/abstraction layer/---> storage model (SQL Server SchemaB.Table1)

    To Entity Framework is database independent. Αρα, μπορεις να μεταφερεις την εφαρμογη σου πχ στην oracle
    Conceptual model: Table1 ---/abstraction layer/---> storage model (Oracle user1.Table1)
    Conceptual model: Table11 ---/abstraction layer/---> storage model (Oracle user1.Table2)

    --HTH--

  •  20-12-2010, 21:49 61792 σε απάντηση της 61779

    Απ: SQL Server Schemas & Entity Framework 4

    Μάλλον πρέπει να "επέμβεις" manually στο section του storage model. Υπάρχει κατάλληλο attribute. Δεν το έχω δοκιμάσει. Κάνεις import με τον wizard δύο (ή περισσότερες φορές) το ίδιο table, αλλά από άλλο schema, και συμπεριφέρεται όπως περιγράφεις; (μη βαράτε... το έκανα edit).

    Ο spaceman έχει δίκιο. Το πρόβλημα είναι η διάκριση των entities στο μοντέλο. Η πιο απλή λύση είναι ίσως η υιοθέτηση ενός naming convention της μορφής: EntityNameFromActivity.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  20-12-2010, 23:04 61809 σε απάντηση της 61792

    Απ: SQL Server Schemas & Entity Framework 4

    Ευχαριστώ για τις απαντήσεις αλλά είναι γνωστά όλα αυτά αγαπητοί μου φίλοι. Αυτό που με ενοχλεί είναι το γεγονός ότι η ονομασία που δίνει με τον άσσο στο τέλος είναι τόσο μα τόσο...

    Από την άλλη στο SSDL δεν έχει πρόβλημα τα έχει κανονικά στο σχήμα που είναι. Αλλά είναι αρκετά ενοχλητικό να πρέπει να πηγαίνω με το χέρι να κάνω τις αλλαγές στο xml το model, δεν μιλάμε για μικρή βάση όσον αφορά τον αριθμό των πινάκων, είναι πάρα πολλοί... και τρέμω στην σκέψη ότι κάτι μπορεί να γίνει λάθος. Επίσης τρέμω στην σκέψη ότι ίσως χρειαστεί να γίνει μια αλλαγή στην βάση και θα πρέπει να γίνει update το model. Τέλος θα πρέπει να αναφέρω ότι αυτό θα το χρησιμοποιεί μια αρκετά μεγάλη ομάδα από developers που δυστυχώς δεν είναι όλοι στην ίδια φυσική τοποθεσία.

    Επίσης υπάρχουν αρκετά view (partitioned τα περισσότερα) και αρκετές stored procedures (ξέρω ότι το τραβάω στα όρια του, αλλά δεν μπορώ να δεχθώ με τίποτα όμως τον SQL Server σαν κουβά δεδομένων). Άσε δε που έχω χρησιμοποιήσει SQL CRL data types όπως hierarchyID, Filestream, sparce columns και λοιπα άλλα καλούδια του SQL Server τα οποία όμως κάνουν το EF να πηγαίνει για κρύες μπύρες. Ξέρω Ξέρω ζητάω πολλά... απλά τώρα λέω τον πόνο μου...

    Anyway θα το παλέψω κάπως αλλιώς και ίσως βρω λύση :(


    Antonios Chatzipavlis

  •  21-12-2010, 04:33 61811 σε απάντηση της 61809

    Απ: SQL Server Schemas & Entity Framework 4

    Αυτό που με ενοχλεί είναι το γεγονός ότι η ονομασία που δίνει με τον άσσο στο τέλος είναι τόσο μα τόσο...

    Δυστυχως, αυτος ειναι ο τροπος που λειτουργει ο Entity Data Model Wizard και δεν προσφερει ιδιαιτερο ελεγχο στον τροπο δημιουργιας των entities.
    Υπαρχει τροπος να διευρυνεις/επεκτεινεις τις λειτουργιες του wizard αλλα δεν γνωριζω κατα ποσο ειναι εφικτο να αλλαξεις το ονομα ενος entity μετα την δημιουργια του model. Ισως να αξιζει να ριξεις μια ματια σε αυτο (custom property after edmx is generated) : http://msdn.microsoft.com/en-us/library/microsoft.data.entity.design.extensibility.imodelgenerationextension.onaftermodelgenerated.aspx

    Από την άλλη στο SSDL δεν έχει πρόβλημα τα έχει κανονικά στο σχήμα που είναι.
    Στο storage model, το schema των πινακων ειναι απαραιτητο, εφοσον οι πινακες SchemaA.Table1 και SchemaB.Table1 ειναι διαφορετικοι data containers :
    An EntitySet element in store schema definition language (SSDL) represents a table or view in the underlying database.
    An EntityType element in SSDL represents a row in the table or view.
    EntitySet (SSDL) attributes: Name, EntityType, Schema, Table
    EntityType (SSDL) attributes: Name

    Στο conceptual model, ειναι το ονομα που διαχωριζει τις entities :
    The EntitySet element in conceptual schema definition language is a logical container for instances of an entity type and instances of any type that is derived from that entity type.
    The relationship between an entity type and an entity set is analogous to the relationship between a row and a table in a relational database.
    Like a row, an entity type defines a set of related data, and, like a table, an entity set contains instances of that definition.
    An entity set provides a construct for grouping entity type instances so that they can be mapped to related data structures in a data source.
    EntitySet (CSDL) attributes: Name, EntityType
    EntityType (CSDL) attributes: Name, BaseType, Abstract, OpenType

    Ο model designer (αλλα και ο κωδικας της εφαρμογης) "χρησιμοποιουν" το conceptual model, στο οποιο ΔΕΝ υπαρχει η εννοια του Schema (οπως χρησιμοποιειται στις databases).

    ...δεν μιλάμε για μικρή βάση όσον αφορά τον αριθμό των πινάκων, είναι πάρα πολλοί...
    Ισως θα πρεπει να χρησιμοποιησεις πολλαπλα models (συν των αλλων, ενα απο τα κριτηρια για διαφορετικα models θα μπορουσε να ειναι και το schema των πινακων (με καποια επιφυλαξη)): http://thedatafarm.com/blog/data-access/creating-models-from-databases-with-billions-of-tables/

    Επίσης τρέμω στην σκέψη ότι ίσως χρειαστεί να γίνει μια αλλαγή στην βάση και θα πρέπει να γίνει update το model.
    http://stackoverflow.com/questions/3273120/entity-framework-v4-preventing-storage-model-overwrites-by-update-model-wizard

    ξέρω ότι το τραβάω στα όρια του, αλλά δεν μπορώ να δεχθώ με τίποτα όμως τον SQL Server σαν κουβά δεδομένων
    I know exactly what you mean, αλλα πολλοι application developers (με 'η χωρις το entity framework) καπως ετσι παρεξηγουν/αντιλαμβανονται τους database servers  (ως εναν κουβα) ιδιως οταν μπορουν να αρχισουν να γραφουν κωδικα χωρις να απαιτειται καν η φυσικη παρουσια βασης (EF4, code first development)

    Το EF is not my cup of tea και οι καποιες γνωσεις/πληροφοριες σχετικα με το framework δοθηκαν κυριως απο συναδελφους σε συζητησεις κ απο 2-3 ενδιαφερουσες παρουσιασεις (monthly architecs knowledge sharing) στα πλαισια της δουλειας.

    Οπως και να 'χει, καλη επιτυχια με το Project.

    --HTH--

  •  21-12-2010, 06:20 61812 σε απάντηση της 61809

    Απ: SQL Server Schemas & Entity Framework 4

    Antonios Chatzipavlis:

    Από την άλλη στο SSDL δεν έχει πρόβλημα τα έχει κανονικά στο σχήμα που είναι. Αλλά είναι αρκετά ενοχλητικό να πρέπει να πηγαίνω με το χέρι να κάνω τις αλλαγές στο xml το model, δεν μιλάμε για μικρή βάση όσον αφορά τον αριθμό των πινάκων, είναι πάρα πολλοί... και τρέμω στην σκέψη ότι κάτι μπορεί να γίνει λάθος. Επίσης τρέμω στην σκέψη ότι ίσως χρειαστεί να γίνει μια αλλαγή στην βάση και θα πρέπει να γίνει update το model. Τέλος θα πρέπει να αναφέρω ότι αυτό θα το χρησιμοποιεί μια αρκετά μεγάλη ομάδα από developers που δυστυχώς δεν είναι όλοι στην ίδια φυσική τοποθεσία.

    Επίσης υπάρχουν αρκετά view (partitioned τα περισσότερα) και αρκετές stored procedures (ξέρω ότι το τραβάω στα όρια του, αλλά δεν μπορώ να δεχθώ με τίποτα όμως τον SQL Server σαν κουβά δεδομένων). Άσε δε που έχω χρησιμοποιήσει SQL CRL data types όπως hierarchyID, Filestream, sparce columns και λοιπα άλλα καλούδια του SQL Server τα οποία όμως κάνουν το EF να πηγαίνει για κρύες μπύρες. Ξέρω Ξέρω ζητάω πολλά... απλά τώρα λέω τον πόνο μου...

    Αντώνη,

    Κατά την διάρκεια που είσαι μέσα στο designer και βλέπεις το σχήμα του Model, με δεξί κλικ στο κενό, σου γίνει την δυνατότητα να κάνεις "Add Artifact...". Ουσιαστικά πρόκεται για ένα T4 template που θα σου δημιουργήσει τον κώδικα του μοντέλου. Ανάλογα με το τι extras έχεις φορτώσει στο studio έχεις και περισσότερες δυνατότητες (πχ Data Designer Feature Pack 1, POCOs Templaters κτλ). To θέμα είναι ότι το T4 είναι κώδικας που φτιάχνει κώδικα, και μπορείς να επέμβεις για να κάνεις αυτό που θες και να διαμορφώσεις τον τελικό κώδικα όπως θες.

    Είναι χαζό να κάθεσαι με το χέρει να πειράζεις το xml, για να σου φτιάχνει τα ονόματα, ενώ μπορείς να έχεις ένα "έξυπνο σκλάβο" το T4 template, να σου κάνει τη δουλειά - άσε που αν τον φτιάξεις σε άλλο project αργότερα όποτε θες...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  21-12-2010, 09:07 61815 σε απάντηση της 61812

    Απ: SQL Server Schemas & Entity Framework 4

    Συμφωνώ με το T4. Στο event έκανα ακριβώς αυτό, χρησιμοποίησα το POCO template και μάλιστα για τις ανάγκες του demo το πείραξα ώστε να προσθέσω και validation (οπότε τα POCOs δεν ήταν και τόσο POCOs πλέον, αλλά αυτό είναι άλλο θέμα). Είχα ξαναδεί το T4 ακαδημαϊκά, δεν είχα ασχοληθεί ιδιαίτερα, αλλά μέσα σε 1 ώρα είχα φέρει τον generated κώδικα εκεί που ήθελα και χωρίς Τ4 editor της προκοπής.

     


    Vir prudens non contra ventum mingit
  •  21-12-2010, 14:10 61820 σε απάντηση της 61811

    Απ: SQL Server Schemas & Entity Framework 4

    δεν γνωριζω κατα ποσο ειναι εφικτο να αλλαξεις το ονομα ενος entity μετα την δημιουργια του model

    Προφανως, ειναι δυνατον : http://www.databinding.de/Blog.51+M532be48af56.0.html 

    --ΗΤΗ--

  •  27-12-2010, 15:04 61927 σε απάντηση της 61820

    Απ: SQL Server Schemas & Entity Framework 4

    spaceman:

    Προφανως, ειναι δυνατον : http://www.databinding.de/Blog.51+M532be48af56.0.html 

    --ΗΤΗ--

    Κατέβασα το trial να το δοκιμάσω...

    Τελικά έχασα το χρόνο μου, το παρόν έχει πολλά bugs και ναι μεν έχει την επιλογή για να βάζει το schema αλλά δεν κάνει τίποτα. Αν έκανε τουλάχιστον αυτό θα έδινα ευχαρίστως τα 150€ που ζητάνε αλλά δεν...

    Να σημειώσω μόνο  ότι το περιβάλλον στο οποίο εγω δουλεύω και κάνω ανάπτυξη ειναι Windows Server 2008 R2 και σε αυτό εγκατέστησα την παραπάνω εφαρμογή. Ξέρω ότι κανόνικά δεν έχει σημασία αλλά μπορεί σε κάποιον με Vista ή W7 να "παίξει"...

     


    Antonios Chatzipavlis

  •  27-12-2010, 19:48 61938 σε απάντηση της 61927

    Απ: SQL Server Schemas & Entity Framework 4

    Antonios Chatzipavlis:
    Κατέβασα το trial να το δοκιμάσω...

    Τελικά έχασα το χρόνο μου, το παρόν έχει πολλά bugs και ναι μεν έχει την επιλογή για να βάζει το schema αλλά δεν κάνει τίποτα. Αν έκανε τουλάχιστον αυτό θα έδινα ευχαρίστως τα 150€ που ζητάνε αλλά δεν...

    Να σημειώσω μόνο  ότι το περιβάλλον στο οποίο εγω δουλεύω και κάνω ανάπτυξη ειναι Windows Server 2008 R2 και σε αυτό εγκατέστησα την παραπάνω εφαρμογή. Ξέρω ότι κανόνικά δεν έχει σημασία αλλά μπορεί σε κάποιον με Vista ή W7 να "παίξει"...

    Βασικά για να σου φύγει ο καημός, να σου πω ότι και η δική μου εμπλοκή με την DevArt και τα προϊόντα της, έληξε το ίδιο άδοξα, αν και ήταν για Oracle - αν και εγώ ήρθα σε επαφή και με το επίσημο support δεν μπορώ να πω ότι με πείσανε για το προϊόν τους.

    Πάντως κάτσε και δες το T4 - μόνο έτσι θα φτιάξεις ότι θες, όπως το θες. Ξεκίνα από κάτι έτοιμο, βάλε ένα Τ4 Editor και δες την μαγεία - άσε που πιστεύω ότι με λίγο ψάξιμο θα βρεις ψιλο-έτοιμο αυτό που θες...

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems