El procedimiento o función espera el parámetro que no se suministró

asp.net-mvc-4 dapper repository-pattern stored-procedures unit-of-work

Pregunta

Mi procedimiento almacenado es

Create proc [dbo].[InsertPerson]
(
    @LastName   VARCHAR(64),
    @FirstName  VARCHAR(64),
    @Age        INT
)
AS
INSERT INTO Person Values(@LastName,@FirstName,@Age)

El método save de la clase BaseRepository es el siguiente:

public virtual int Add(string storedProcedure, T entity, IDbTransaction transaction)
 {
    var i = 0;

    try
    {

       if (entity == null)
          throw new ArgumentNullException("entity", "Add to DB null entity");

       var parameters = (object)Mapping(entity);
       i = _conn.Execute(storedProcedure, parameters, transaction, commandType: CommandType.StoredProcedure);

    }
    catch (Exception ex)
    {

       throw ex;

    }

    return i;
 }

El método del mapa es el siguiente:

internal virtual dynamic Mapping(T entity)
{
  return entity;
}

La definición de la clase PersonRepository es la siguiente:

public class PersonRepository:DapperRepository<Person>, IPersonRepository
{
   public PersonRepository(IUnitOfWork uow) : base(uow) { }

   internal override dynamic Mapping(Person person)
   {
      return new {person.LastName, person.FristName, person.Age };
   }
}

Mi clase de servicio declaró el método Guardar de la siguiente manera:

public void Save(Person person)
{
  try
  {
    string sp = "InsertPerson";
    _repository.Add(sp, person, _unitOfWork.BeginTransaction());
    _unitOfWork.Commit();
  }
  catch (Exception)
  {

     throw;
  }
}

Cuando intento ejecutar mi método Save, me muestra la siguiente excepción:

Procedure or function 'InsertPerson' expects parameter '@FirstName', which was not supplied.

Respuesta aceptada

Hay un error ortográfico en el nombre de su propiedad

person.FristName

debería ser

person.FirstName

Así que ahora su función de mapeo debería verse así

internal override dynamic Mapping(Person person)
{
      return new {person.LastName, person.FirstName, person.Age };
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué