Как установить значение null в свойство GUID

У меня есть объект типа Employee, у которого есть свойство Guid. Я знаю, если я хочу установить значение null, я должен определить свойство type как nullable Nullable<Guid> prop или Guid? проп.

Но в моем случае я не могу изменить тип опоры, поэтому он останется таким же, как тип Guid, и мой коллега, и я не хотим использовать Guid.Empty.

Есть ли способ установить мое свойство как null или string.empty, чтобы восстановить поле в базе данных как null.

У меня есть механизм для преобразования из string.empty в null, но я изменил бы многие вещи, если бы изменилось, чтобы принять пустое guid в null.

Любая помощь, пожалуйста!

Ответ 1

Есть ли способ установить мое свойство как null или string.empty для того, чтобы восстановить поле в базе данных как null.

Нет, потому что это не обнуляется. Если вы хотите, чтобы он был обнуляемым, вы должны использовать Nullable<Guid> - если бы вы этого не делали, было бы Nullable<T> начинать с Nullable<T>. У вас здесь есть фундаментальная проблема - которую вы действительно знаете, учитывая ваш первый абзац. Вы сказали: "Я знаю, хочу ли я достичь А, я должен сделать В - но я хочу достичь А, не делая В". Это невозможно по определению.

Самое близкое, что вы можете получить, это использовать один конкретный GUID для Guid.Empty нулевого значения - Guid.Empty (также доступен по default(Guid) где это необходимо, например, для значения по умолчанию необязательного параметра), который является очевидным кандидатом, но один Вы отклонили по неуказанным причинам.

Ответ 2

Guid? myGuidVar = (Guid?)null;

Это может быть. Ненужное литье не требуется.

Guid? myGuidVar = null;

Ответ 3

Выберите свой яд - если вы не можете изменить тип свойства, который должен быть нулевым, вам придется использовать "магическое" значение для представления NULL. Guid.Empty выглядит так же хорошо, как и любой другой, если у вас нет определенной причины не хотеть использовать его. Второй выбор был бы Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff"), но это намного уродливое IMHO.

Ответ 4

Так как "Guid" не является нулевым, используйте значение "Guid.Empty" как значение по умолчанию.

Ответ 5

Вы можете использовать typeof(Guid), "00000000-0000-0000-0000-000000000000" для свойства DefaultValue.

Ответ 6

вы можете заставить переменную guid принять null сначала с использованием? оператор, то вы используете Guid.Empty или приведите его к нулю с помощью (Guid?) null;

например:

 Guid? id = Guid.Empty;

или же

 Guid? id =  (Guid?)null;

Ответ 7

извлечь значения Guid из функций базы данных:

    #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

Ответ 8

Я думаю, что это правильный путь:

Guid filed = Guid.Empty;