Question

J'ai un champ dans une table Azure qui détient les temps de date sous forme de chaîne. Je veux remplacer par un champ DateTime et convertir les valeurs dans la colonne de chaîne. Quelle est la meilleure façon d'aborder ce sujet?

Dans un SQL que je ferais cela en créant une nouvelle colonne et exécuter une instruction de mise à jour ...

Était-ce utile?

La solution

Je n'ai pas essayé moi-même, mais voici les étapes / doit / travail. Cela doit être un C # / VB / etc script.

  1. Modifier la définition de la classe pour contenir un / nouveau / membre de type datetime.
  2. Exécutez la requête LINQ pour charger toutes les lignes de la table, et exécuter une boucle qui peupleront nouvelle variable datetime basée sur l'ancienne variable de chaîne.
  3. Enregistrer les objets à la table. // maintenant votre stockage de table contient des objets avec une définition nouvelle et ancienne de cette variable
  4. Retirez l'ancien champ de la définition de la classe
  5. Chargez les objets de la table à nouveau et les enregistrer w / o faire autre chose que marquer les salir. Cette / doit / se débarrasser de l'ancien membre des structures sérialisé à l'intérieur du tableau. Maintenant, si vous voulez que le nouveau champ datetime de prendre le nom de la variable de chaîne d'origine ne étapes 1 à 5, cette fois de déplacer les données d'un champ à un autre. La seule différence est que vous ne devez pas faire à nouveau la conversion.

En général, c'est un PITA complet et l'un des banes de bases de données objet et les services de stockage.

Autres conseils

Le Azure Table Storage Client comprend nativement DateTime (mais pas DateTimeOffset), vous voudrez peut-être pour que vous puissiez envisager de laisser simplement prendre soin du SDK de la question.

Dans le cas contraire, la meilleure façon de représenter DateTimes comme des chaînes est de stocker de façon explicite et les récupérer sous forme de valeurs UTC écrites et analysées en utilisant le format « u », par exemple.

var dateAsString = myDateTime.ToString("u");

Je ne sais pas si ça va marcher, mais vous pouvez essayer « bienheureuse ignorance »:

A table magasin ne se soucie pas vraiment de la forme de vos entités (tissu Dev peut être différent). Changer votre propriété d'entité à DateTime, mais dans le test Setter la valeur est un Datetime, sinon analyser la valeur dans un DT. Quelque chose comme

private DateTime myDT
public DateTime MyDT
{
    get
    {
        return myDT;
    }
    set
    {
       DateTime = null;
       if(value is DateTime)
       {
           myDT = value;
       }
       else
       {
           myDT = DateTime.Parse(value);
       }
    }

}

Si tout va bien au fil du temps, ou explicitement dans un lot, si vous chargez simplement les entités et les enregistrer à nouveau, il va les mettre tous à DateTime.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top