2017-08-11 2 views
2

Vous pouvez voir mon PICT: My relationship pictureComment insérer la date lorsque vous mettez à jour le mot de passe?

 entities = new sampleEntities(); 
     User usr = (from i in entities.Users 
        join j in entities.Updates 
        on i.ID equals j.ID 
        where i.NAME == name 
        select i).First(); 

     usr.PASSWORD = textBox2.Text; 
     entities.SaveChanges(); 

donc, Quand je mets à jour le mot de passe, comment faire mon temps de mise à jour est également entré

+0

Que diriez-vous 'usr. [UpdateTimeProperty] = [updatedDateTimevalue] '? Je ne sais pas quelle propriété vous voulez mettre à jour avec l'horodatage mis à jour. –

+0

Souhaitez-vous ajouter un nouvel enregistrement à la table 'Update' pour conserver un historique ou simplement mettre à jour la' Date de la mise à jour'. Si ce dernier pourquoi avez-vous une table supplémentaire pour stocker la 'date de mise à jour'? – Scrobi

+0

@Scrobi Il semble y avoir une relation un-à-un entre l'utilisateur et la table de mise à jour. Cela n'a pas de sens si c'est la structure complète d'une table et non une partie d'une image plus grande. Cela peut simplement être une colonne à la place. – Harsh

Répondre

2

Vous pouvez remplacer saveChanges.

public override int SaveChanges() 
{ 

    var addedUsers = ChangeTracker.Entries<User>().Where(x => x.State 
             == EntityState.Added).ToList(); 

    addedUsers.ForEach(x => 
    { 
     x.Update = new Update{DateOfUpdate = DateTime.Now} 
    }); 

    var modifiedUsers = ChangeTracker.Entries<User>().Where(x => x.State 
              == EntityState.Modified).ToList(); 

    modifiedUsers.ForEach(x => 
    { 
     x.Update.DateOfUpdate = DateTime.Now; 
    }); 

    return base.SaveChanges(); 
} 

Si vous avez l'intention de suivre ces dates modifiées pour plusieurs tables mieux d'utiliser une classe de base avec ces dates et d'hériter toutes les tables nécessitant date de modification de cette classe. De cette façon, votre sauvegarde saveChanges sera générique et fonctionnera pour toutes les tables héritant de cette classe de base.

0

Si vous avez juste besoin de mettre à jour le Date of Update vous pouvez modifier la sélection pour apporter également ces données en arrière et puis mettre à jour les tables User et Update

entities = new sampleEntities(); 
var data = (from i in entities.Users 
       join j in entities.Updates 
       on i.ID equals j.ID 
       where i.NAME == name 
       select new {user = i, update = j).First(); 

    data.user.PASSWORD = textBox2.Text; 
    if (data.update == null) data.update = new Update(); 

    data.update.DateofUpdate = DateTime.Now; 
    entities.SaveChanges(); 
+0

Lors de la première inscription, j'utilise 'Utilisateur akun = new User(); akun.NAME = textBox1.Text; akun.PASSWORD = textBox2.Text; akun.DateCreate = DateHeure.Now; entities.Users.Add (akun); entities.SaveChanges(); ' Les utilisateurs de table, ID = 1 Name = Andy Mot de passe = Andy123 DateCreate = 11/10/2017 UpdateID = NULL = NULL RecoveryId Tableau mise à jour ID = NULL DateOfUpdate = NULL Récupération de table ID = NULL DateOfRecovery = NULL –

+0

En effet, vous devez ajouter une entrée à la table 'Update'. À quel moment voulez-vous ajouter une entrée à cette table lors de la première mise à jour ou lorsque le 'user' est créé/enregistré en premier? – Scrobi

+0

Je veux que lors de la première mise à jour, Ou vous avez une suggestion? –