web-dev-qa-db-fra.com

Comment mettre null à un GUID propriété

J'ai un objet de type Employee qui a une propriété Guid. Je sais que si je souhaite définir la valeur null, je dois définir ma propriété type comme nullable Nullable<Guid> prop ou Guid? soutenir.

Mais dans mon cas, je ne suis pas en mesure de changer le type de l'accessoire, il reste donc en tant que type Guid et mon collègue et moi ne souhaitons pas utiliser le Guid.Empty.

Existe-t-il un moyen de définir ma propriété sur null ou sur string.empty afin de rétablir le champ de la base de données sur null.

J'ai un mécanisme pour transformer de string.empty à null mais je changerai beaucoup de choses si cela changerait pour accepter un GUID vide en null.

Toute aide s'il vous plaît!

13
Maximus Decimus

Existe-t-il un moyen de définir ma propriété sur null ou sur string.empty afin de rétablir le champ de la base de données sur null.

Non, parce que c'est non nullable. Si vous voulez que ce soit nul, vous devez utiliser Nullable<Guid> - si vous ne le vouliez pas, il ne servirait à rien d'avoir Nullable<T> pour commencer. Vous avez un problème {fondamental} _ ici - que vous connaissez réellement, étant donné votre premier paragraphe. Vous avez dit: "Je sais que si je veux atteindre A, je dois faire B - mais je veux atteindre A sans faire B." C'est impossible par définition.

Le plus proche que vous puissiez obtenir est d'utiliser un GUID spécifique pour remplacer une valeur nulle - Guid.Empty étant le candidat évident, mais que vous avez rejeté pour des raisons non spécifiées.

42
Jon Skeet
Guid? myGuidVar = (Guid?)null;

Il pourrait être. Casting inutile non requis.

Guid? myGuidVar = null;
18
A.S

Choisissez votre poison - si vous ne pouvez pas changer le type de la propriété pour qu'il soit nullable, vous devrez utiliser une valeur "magique" pour représenter NULL. Guid.Empty semble aussi bon que tout sauf si vous avez une raison précise de ne pas vouloir l'utiliser. Un deuxième choix serait Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff") mais c'est beaucoup plus moche IMHO.

9
D Stanley

Puisque "Guid" n'est pas nullable, utilisez "Guid.Empty" comme valeur par défaut.

8
macrobbsen

Vous pouvez utiliser typeof(Guid), "00000000-0000-0000-0000-000000000000" pour DefaultValue de la propriété.

2
Juke Exch

vous pouvez faire que la variable guid accepte d'abord null en utilisant? opérateur, vous utilisez Guid.Empty ou vous pouvez le transformer en null en utilisant (Guid?) null;

par exemple:

 Guid? id = Guid.Empty;

ou 

 Guid? id =  (Guid?)null;
0
Ranjith

extraire les valeurs Guid des fonctions de la base de données:

    #region GUID

    public static Guid GGuid(SqlDataReader reader, string field)
    {
        try
        {
            return reader[field] == DBNull.Value ? Guid.Empty : (Guid)reader[field];
        }
        catch { return Guid.Empty; }
    }

    public static Guid GGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            return reader[ordinal] == DBNull.Value ? Guid.Empty : (Guid)reader[ordinal];
        }
        catch { return Guid.Empty; }
    }

    public static Guid? NGuid(SqlDataReader reader, string field)
    {
        try
        {
            if (reader[field] == DBNull.Value) return (Guid?)null; else return (Guid)reader[field];
        }
        catch { return (Guid?)null; }
    }

    public static Guid? NGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            if (reader[ordinal] == DBNull.Value) return (Guid?)null; else return (Guid)reader[ordinal];
        }
        catch { return (Guid?)null; }
    }

    #endregion
0
Ángel Ibáñez