Καλησπέρα,
κάνω την πρώτη μου προσπάθεια να δημιουργήσω ένα έργο με Entity Framework 4 και Self Tracking Entities.
Όλα λειτουργούν κανονικά, το πρόβλημα μου όμως είναι ότι το Entity Framework δεν υποστηρίζει την μεταβολή του πρωτεύοντος κλειδιού.
Όπως βλέπετε παρακάτω στον κώδικα που δημιουργεί το Τ4 πρότυπο, η αλλαγή του προτεύοντος κλειδιού δεν επιτρέπετε όταν η εγγραφή
παρακολουθείται για αλλαγές και δεν είναι σε κατάσταση προς εισαγωγή.
[DataContract(IsReference = true)]
public partial class EcrDevice: IObjectWithChangeTracker, INotifyPropertyChanged
{
#region Primitive Properties
[DataMember]
public short Id
{
get { return _id; }
set
{
if (_id != value)
{
if (ChangeTracker.ChangeTrackingEnabled && ChangeTracker.State != ObjectState.Added)
{
throw new InvalidOperationException("The property 'Id' is part of the object's key and cannot be changed. Changes to key properties can only be made when the object is not being tracked or is in the Added state.");
}
_id = value;
OnPropertyChanged("Id");
}
}
}
private short _id;
Θα μπορούσε το ΕF να κρατάει την τιμή του προτεύοντος κλειδιού εσωτερικά της τάξης και να κάνει μια απλή ενημέρωση όπως παρακάτω
Update EcrDevice SET EcrDevice.Id=@Id, EcrDevice.Port=@PortNumber where EcrDevice.Id=@PreviousId
Σκέφτομαι πως θα μπορούσα να κάνω χρήση Stored Proc με το EF για την ενημέρωση, αλλά δεν μου αρέσει αυτή η προσέγγιση
Κάθε βοήθεια για κάποιο Workaround είναι ευπρόσδεκτη
Θα ήθελα να μην μπούμε στην διαδικασία να εξηγήσουμε γιατί μία εγγραφή χαρακτηρίζεται μοναδικά από το πρωτεύον κλειδι και δεν πρέπει να μπορούμε να το μεταβάλουμε.
Σας ευχαριστώ !
Μπλουγουράς Γιάννης
Wizcom O.E.