프로 시저 또는 함수가 제공되지 않은 매개 변수를 필요로합니다.

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

문제

내 저장 프로 시저입니다.

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

BaseRepository 클래스의 save 메서드는 다음과 같습니다.

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;
 }

지도 방법은 다음과 같습니다.

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

PersonRepository 클래스의 정의는 다음과 같습니다.

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 };
   }
}

내 Service 클래스 Save 메서드를 다음과 같이 선언했습니다.

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

     throw;
  }
}

Save 메서드를 실행하려고 할 때 다음 예외를 표시합니다.

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

수락 된 답변

속성 이름에 맞춤법 오류가 있습니다.

person.FristName

그것은해야한다

person.FirstName

이제 매핑 함수는 다음과 같아야합니다.

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.