viernes, 12 de noviembre de 2021

Error "Data is Null. This method or property cannot be called on Null values" en Entity Framework 6

 Descripción del problema

Acabas de instalar VS2022 y .NET6 SDK, creas un proyecto que accede a una base de datos  Para generar los modelos y mapeos usas ingeniería inversa, por ejemplo Entity Framework Generator

Creas un controlador API Get para obtener una lista de fabricas desde Blazor. ¡Oh sorpresa! La cosa no funciona. 

El mensaje de error es: "Data is Null. This method or property cannot be called on Null values"

Resolución

Debes deshabilitar Admite valores NULL en Compilación/general del proyecto donde tienes los modelos y dbcontext para acceder a la base de datos.

Explicación

En C#8 cuando habilitas la característica NRT debes usar string? para una propiedad de cadena que admita nulos y string para una que no los admita.

EF6 CORE implementa NRT mediante anotaciones, pero los generadores databasefirst no asocian el tipo string? a las propiedades mapeadas a columnas varchar nullables.


lunes, 25 de enero de 2021

No se inicia la depuraración blazor Wasm con Chrome desde VS2019

Síntomas

En Visual Studio 2019 al iniciar la depuración de una solución blazor WebAssembly .net core hospedada salta una ventana que dice:
No se puede iniciar el depurador .
Habla de un error en microsoft.visualstudio.shared.vscode debug protocol.protocolexception 

Dándole vueltas

La solución podía depurarse hasta que aparece el error ,entonces la única solución es cambiar de browser. 
El problema aparece en los navegadores de la familia chromium (Chrome, Edge,...).
Sin embargo se puede depurar con Firefox. 
Ocurre con otro tipo de soluciones aparte de Blazor Wasm

Solución

Eliminar el archivo en /.vs/[project name]/config/debuggerConfiguration-{guid}.json de la solución
Si tienes Chrome abierto cierralo.
Ya puedes depurar durante un rato.

Consejo:

Deja abierta la carpeta /.vs/[project name]/config/ para ir eliminando el archivo cada cierto tiempo.

jueves, 7 de noviembre de 2019

QRCode.js y Code Length OverFlow Error

El problema

Estoy generando QRCodes mediante  QRCode.js
https://github.com/davidshimjs/qrcodejs
Sin embargo según el contenido algunos se visualizan y otros no.
Mirando en la ventana del navegador veo:
Code Length Overflow Error
por algún problema en el código de QRCode.js

Solución

Usar la bifurcación del proyecto que realizó la compañía Keepx
https://github.com/KeeeX/qrcodejs
dado que el proyecto original no tiene mantenimiento desde hace años.

Referencias

https://github.com/davidshimjs/qrcodejs/issues/78#issuecomment-278567765

vcard, acentos y eñes.

El problema

Creas una página web desde donde pueden descargarse archivos VCard para importarlos y crear contactos en Outlook.
Todo funciona bien salvo que tildes, eñes u otros carácteres  no usados en inglés no se visualizan bien.
Por ejemplo Dª Estefanía se importa como D? Estefan?a

Contexto

El problema me apareció en un desarrollo C# MVC ASP.NET usando la librería MixERP.Net.VCards pero la solución tiene aplicación en otros contextos,

Solución

Hay que codificar con "ISO-8859-1".

Usando un controlador ASP.NET MVC el código es:

        [HttpPost]
        public ActionResult VCard(Simple cto)
        {
            var _VCard = cto.GetComplejo().getVcard(); //genera Vcard en formato MixERP.Net.VCards
            Response.Clear();
            Response.AddHeader(
                $"Content-Disposition",
                $"attachment; filename={_VCard.FormattedName }.vcf;"
                );
            var serializedvCard = _VCard.Serialize();
            return File(
                Encoding.GetEncoding("ISO-8859-1").GetBytes(serializedvCard),
                "text/x-vcard; charset=ISO-8859-1"
                );
        }

martes, 30 de octubre de 2018

Insertar HTML en el cuerpo de un mensaje Outlook 2016

Situación

Quieres insertar el contenido de un archivo HTML en un mensaje de Outlook.
No ves la opción buscas en la web y dicen que cuando adjuntas un archivo tienes un desplegable para elegir entre adjuntar o insertar como texto. Pero en la versión 365 de Outlook no ves el desplegable.

Solución 

En la barra de titulo de la ventana del mensaje hay accesos rápidos, añade el acceso rápido para adjuntar un archivo.
Cuando uses este acceso rápido para adjuntar un archivo veras que el botón insertar es un botón desplegable con la opción deseada.
(desde una respuesta en Comunidad de Microsoft

jueves, 9 de agosto de 2018

Las GPO no se aplican al arrancar

Sintomas

Últimamente mi Windows 10 no aplica las GPO por lo que entre otras no se mapean las unidades de
red y aparecen eventos 1110.

Solución

Arrancar el servicio net logon que está detenido y colocarlo en automático.

¿Por qué se ha detenido el servicio Net Logon? ¿Por qué está en manual?

El asistente de soporte de DELL establece el arranque en manual porque piensan que todos los usuarios son domésticos y no necesitan el servicio net logon.
https://www.dell.com/community/SupportAssist/Dell-SupportAssistant-sets-Netlogon-service-to-manual/td-p/6083752
😡😡😡😡😡😡😡😡😡 😡😡😡😡😡😡

jueves, 19 de abril de 2018

Dos Helpers Razor para postear diccionarios en forms y Json

Descripción

El modelo de una página Razor incluye propiedades del tipo diccionario que queremos postear como campos ocultos o mediante Json.

Solución

Para camposOcultos

@helper OcultoDictionary(Dictionary<int, int> dicc, string nombre)
    {
        var i = 0;
        foreach (var d in dicc)
        {
            <input type="hidden" value="@d.Key" name="@string.Format("{0}[{1}].Key",nombre,i)" />
            <input type="hidden" value="@d.Value" name="@string.Format("{0}[{1}].Value",nombre,i)" />
            i++;
        }
}

Ejemplo de resultados

<input type="hidden" value="1" name="ExperienciasEspecificas[0].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[0].Value" />
<input type="hidden" value="2" name="ExperienciasEspecificas[1].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[1].Value" />
<input type="hidden" value="3" name="ExperienciasEspecificas[2].Key" />
<input type="hidden" value="1" name="ExperienciasEspecificas[2].Value" />

Para Json

@helper JsonDiccionario(Dictionary<int, int> dic, string n)
    {
        var i = 0;
        foreach (var d in dic)
        {
            @Html.Raw($"'{n}[{i}].Key':{d.Key},")
            @Html.Raw($"'{n}[{i}].Value':{d.Value},")
            i++;
        }
}

Ejemplo de resultados

{
...
'ExperienciasEspecificas[0].Key':1,
'ExperienciasEspecificas[0].Value':1,
'ExperienciasEspecificas[1].Key':2,
'ExperienciasEspecificas[1].Value':1,
'ExperienciasEspecificas[2].Key':3,
'ExperienciasEspecificas[2].Value':1,
...
}