¿Por qué estoy recibiendo una ejecución de tiempo de ejecución al devolver la dinámica?

StackOverflow https://stackoverflow.com/questions/7372462

  •  28-10-2019
  •  | 
  •  

Pregunta

Estoy usando masivo y tengo una mesa para miembros. En mi clase de miembros tengo un método de búsqueda para encontrar un miembro por correo electrónico:

   public class Members : DynamicModel
    {
        public Members(): base("TSConnection", "Members", "Id"){}

        public dynamic Find(string email)
        {
            dynamic result = new ExpandoObject();
            result.Success = false;
            try
            {
                result.Member = this.Single(where: "Email=@0", args: email);
                result.Success = result.Member != null;
            }
            catch (Exception ex)
            {
                result.Message = ex.Message;
            }
            return result;
        }
}

Esto devuelve todo como se esperaba y en una prueba de prueba unitaria separada que result.Member.Id muestra que está poblado con los datos.

En una clase separada, direcciones. Intento usar este método para verificar que el usuario existe y recuperar el miembro.id para usar al insertar una dirección para el miembro en particular:

 public class Addresses : DynamicModel
    {
        public Addresses() : base("TS", "Addresses", "Id") { }

        public dynamic Create(string email, string type, string address1, string address2, string city, string state, int countryId, string postcode)
        {
            var members = new Members();
            dynamic result = new ExpandoObject();
            result.Success = false;
            //var member = members.Find(email);

            result.Member = members.Single(where: "Email=@0", args: email);
            dynamic address = new ExpandoObject();

            if (result.Member != null)
            {
                address.Id = this.Insert(new {
                    MemberId = result.Member.Id,  
                    AddressTypeId = (int)AddressType.Account,
                    Address1 = address1,
                    Address2 = address2,
                    City = city,
                    State = state,
                    Country = countryId,
                    Postcode = postcode
                });
                result.Address = address.Id != 0 ? address : null;
                result.Success = address.Id != 0;
            }
            return result;
        }
}

En la línea de tabulación que lee var member = members.Find(email); Esto está devolviendo una ejecución de tiempo de ejecución cuando intento acceder member.Member.Id. Entro en el código y el método Buscar está 'devolviendo' los datos correctos, pero no se está pasando al miembro variable. Curiosamente cuando uso el código para recuperar al usuario en la línea a continuación:

result.Member = members.Single(where: "Email=@0", args: email);

Funciona bien. Sin embargo, no es realmente bueno para mantener las cosas secas. ¿Qué está pasando y hay alguna forma de usar el método Find de mi clase de miembros dentro de mi clase de direcciones?

Lloyd

¿Fue útil?

Solución

Es porque estás regresando result, de Find, que es un ExpandoObject. Para acceder al Member en Addresses Debe cambiar el código a:

var members = new Members();
var result = members.Find(email);
var member = result.Member;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top