Cómo establecer null a un GUID de la propiedad

Tengo un objeto de tipo Empleado, la cual tiene un Guid de la propiedad. Sé que si quiero establecer en null debo definir mi tipo de propiedad como que aceptan valores null Nullable<Guid> prop o Guid? prop.

Pero en mi caso no soy capaz de cambiar el tipo de la proposición, por lo que se mantiene como Guid tipo y mi colega y yo no queremos utilizar el Guid.Vacío.

Hay una manera de configurar mi propiedad como null o una cadena.vacío con el fin de reestablecer el campo en la base de datos como null.

Me tiene un mecanismo de transformación de la cadena.vacía a null, pero voy a cambiar muchas cosas si la iba a cambiar para aceptar un guid vacío a null.

Cualquier ayuda por favor!

Un Guid es un struct, aquellos que no puede ser null. Usted necesidad de utilizar el tipo que acepta valores null. Ya sea utilizando Guid? o Nullable<Guid>. No hay otra manera.
Cuando veo algo como «sé que debería hacer esto, pero no puedo», a parar ahí. Sí se puede y se debe. ¿Por qué le causa a sí mismo un mundo de dolor por el pirateo de las cosas?

OriginalEl autor Maximus Decimus | 2013-12-10

8 Kommentare

  1. 42

    Hay una manera de configurar mi propiedad como null o una cadena.vacío con el fin de reestablecer el campo en la base de datos como null.

    No. Porque no aceptan valores null. Si quieres que acepta valores null, usted tiene que utilizar Nullable<Guid> – si no, no tendría sentido tener Nullable<T> para empezar. Tienes un fundamental problema aquí – que realmente saben, dada su primer párrafo. Usted ha dicho, «yo sé que si quiero lograr Una, que debo hacer B – pero yo quiero lograr Una sin hacer B.» Eso es imposible por definición.

    Lo más cerca que se puede obtener es el uso de un GUID específico para un valor null – Guid.Empty ser el candidato obvio, pero ha rechazado por razones no especificadas.

    Y a elaborar un poco, es que no los aceptan porque es una estructura y por lo tanto un tipo de valor. Los tipos de valor no puede ser nulo. Nullable<T> puede envolver un tipo de valor en un diferente tipo de valor que puede representar un valor nulo. Si usted fuera a hacer Nullable<Guid> o Guid? para el corto, puede representar la base de datos como un UNIQUEIDENTIFIER NULL
    No, te he entendido mal Nullable<T> – que es un tipo de valor también, pero tiene un valor que representa la ausencia de un envuelto de valor. Nullable<T> sería mucho menos agradable si se tratara realmente de un tipo de referencia.
    Impresionante, no me di cuenta de que. Voy a desmontar y mirar ahora. Gracias por la lección libre. 🙂 En una nota de lado, ¿por qué iba a ser mucho menos agradable como un tipo de referencia?
    Porque entonces tendrías que crear una instancia (en el montón) para cada valor, más que el valor que se está «en línea» – que llevaría a más de GC presión.

    OriginalEl autor

  2. 17
    Guid? myGuidVar = (Guid?)null;

    Podría ser. Innecesario casting no es necesario.

    Guid? myGuidVar = null;
    Interesante comentario de que si usted tiene un aceptan valores null Guid, debe ser concreta como que aceptan valores null en todas partes (me refiero incluso como parámetro dentro de un método).
    Esto me ayudó donde db devuelve un strring, el modelo espera que aceptan valores null GUID UserRoleID = Cadena.IsNullOrEmpty(userrole.RoleId) ? (Guid?)null : nuevo Guid(userrole.RoleId); gracias
    ¿De qué manera obtener 18 upvotes cuando la pregunta dice claramente que no es una respuesta válida? Fue esta fusionado desde otra pregunta?

    OriginalEl autor

  3. 9

    Elige tu veneno – si usted no puede cambiar el tipo de propiedad que acepta valores null entonces usted va a tener que usar una «magia» valor para representar a NULL. Guid.Empty parece tan bueno como cualquier otro a menos que tenga una razón específica para no querer usarlo. Una segunda opción sería Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff") pero que es mucho más feo en mi humilde opinión.

    gracias! su buena

    OriginalEl autor

  4. 7

    Desde «Guid» no acepta valores null, utilizar «Guid.Vacío» como valor predeterminado.

    OriginalEl autor

  5. 2

    Puede utilizar typeof(Guid), "00000000-0000-0000-0000-000000000000" para el valor predeterminado de la propiedad.

    OriginalEl autor

  6. 0

    usted puede hacer guid variable a aceptar null primer uso ? operador, a continuación, utilizar Guid.Vacío o encasillado para el uso de null (Guid?)null;

    por ejemplo:

     Guid? id = Guid.Empty;

    o

     Guid? id =  (Guid?)null;
    La pregunta dice claramente que ellos no pueden hacer esto.

    OriginalEl autor

  7. 0

    extraer Guid valores de base de datos funciones:

        #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

    OriginalEl autor

  8. -1

    Creo que esta es la manera correcta:

    Guid presentada = Guid.Vacío;

    OriginalEl autor

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea