Class και Interface ιεραρχίες στην Οντότητα πλαίσιο;

ψήφοι
11

Έχω δύο σχετικές κατηγορίες που μοιράζονται μια κοινή διεπαφή και οι δύο είναι αποθηκευμένα στον ίδιο υποκείμενο πίνακα της βάσης δεδομένων. Ωστόσο, το πλαίσιο οντοτήτων δημιουργεί μια κοινή κατηγορία, όπου πραγματικά χρειάζονται οι δύο διακριτές κατηγορίες. Πώς μπορώ να επιλύσει αυτό; Είναι καλύτερο να χρησιμοποιήσετε μια βασική κλάση και όχι σε περιβάλλον; Πώς μπορώ να αλλάξω το μοντέλο EF για να παρέχει δύο κατηγορίες χαρτογραφηθεί πάνω από ένα τραπέζι;

Επεξεργασία: το ακίνητο ACCOUNTTYPE καθορίζει τον τύπο της κατηγορίας? χρήστη ή ομάδα.

Μερικές απλές Κωδικός:

public interface IAccount
{
    string Name { get; set; }
    AccountType AccountType { get; set; }
}

public class GroupAccount : IAccount
{
    public string Name { get; set; }
    public GroupType GroupType { get; set; }
    public AccountType AccountType { get; set; }
}

public class UserAccount : IAccount
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public AccountType AccountType { get; set; }
}
Δημοσιεύθηκε 09/12/2008 στις 17:05
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
14

Είναι διακρίσεις αυτά τα δεδομένα; δηλαδή δεν ACCOUNTTYPE καθορίζουν το είδος είναι; Αν είναι έτσι:

  • EF θα πρέπει να δημιουργήσει την οντότητα λογαριασμού από την αποθήκευση
  • μπορείτε στη συνέχεια να δημιουργήσετε 2 υποκατηγορίες (useraccount και GroupAccount)
  • στη χαρτογράφηση του Λογαριασμού, καθορίστε ένα κατηγόρημα «προσθέσετε μια κατάσταση»
    • πρέπει να το χάρτη για να useraccount όπου το πεδίο ACCOUNTTYPE (αποθήκευση) είναι 1 (ή οτιδήποτε άλλο)
    • πρέπει να το χάρτη για να GroupAccount όπου το πεδίο ACCOUNTTYPE (αποθήκευση) είναι 2 (ή οτιδήποτε άλλο)

Ο τύπος του λογαριασμού, στη συνέχεια, θα πρέπει να εξαφανιστεί εντελώς από το αντικείμενο λογαριασμού (unmap, αν όχι). Για να πάρετε μόνο τα αρχεία useraccount, μπορείτε να χρησιμοποιήσετε

 .Accounts.OfType<UserAccount>()...

Η κλάση Θα πρέπει πιθανώς να είναι αφηρημένη σε αυτό το μοντέλο. Τα πράγματα διεπαφή μπορεί να προστεθεί μέσω μιας μερικής κατηγορία - δηλαδή σε ξεχωριστό αρχείο, ορίζουν:

partial class Account : IAccount {
   // extra code here
}

και τα λοιπα

Μια λογική περιδιάβαση είναι εδώ .

Απαντήθηκε 09/12/2008 στις 17:09
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more