Как установить значение 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;