Как получить перегрузку через отражение во время выполнения? - PullRequest
0 голосов
/ 02 августа 2010

С тех пор, как я работаю, заставляю меня использовать хранимые процедуры, и я не был достаточно долго, чтобы предотвратить это, я настроил генерацию кода LiNQ to SQL для всех наших хранимых процедур.Да, верно, у нас есть хранимые процедуры для ВСЕГО доступа к нашим данным, и поскольку у нас нет доступа к таблице , это означает, что мы часто получаем 3 класса для всех «сущностей».Теперь я подхожу к завершению последних изменений, когда я ударился о стену.

Следующий код не работает, и причина в том, что он вызывает сам, но мне нужно получить перегрузку.Причина этого в том, что невозможно отслеживать 40 параметров, поэтому я генерирую «динамический» класс при сборке проекта.

[Function(Name="dbo.user_insert")]
public IList<ProcedureResult> UserInsert(UserInsertObj userInsertObj)
{
    IExecuteResult result = this.ExecuteMethodCall(this, (MethodInfo)MethodInfo.GetCurrentMethod(), 
        userInsertObj.UserId, userInsertObj.ProductId, userInsertObj.FromIp, 
        userInsertObj.CampaignName, userInsertObj.Campaign, userInsertObj.Login, 
        userInsertObj.Password, userInsertObj.Nickname, userInsertObj.Pin, userInsertObj.Language, 
        userInsertObj.Currency, userInsertObj.Country, userInsertObj.Region, userInsertObj.Birthday, 
        userInsertObj.FirstName, userInsertObj.MiddleName, userInsertObj.LastName, 
        userInsertObj.Address1, userInsertObj.Address2, userInsertObj.Address3, userInsertObj.Zip, 
        userInsertObj.City, userInsertObj.Timezone, userInsertObj.Email, userInsertObj.EmailNotify, 
        userInsertObj.Gender, userInsertObj.Phone, userInsertObj.MobileCc, userInsertObj.MobileNr, 
        userInsertObj.MobileModel, userInsertObj.Referral, userInsertObj.GroupId, 
        userInsertObj.StreetNumber, userInsertObj.StreetName);

    return new List<ProcedureResult> 
    { 
        new ProcedureResult
        {
            Name = "userId",
            Value = result.GetParameterValue(0),
            Type = typeof(System.Nullable<System.Int32>) 
        }
    };
}

Я поиграл, используя что-то подобное ниже, но понятия не имеюПерегрузка для использования и поиска в MSDN Я еще не приблизился к чему-либо полезному.

((MethodInfo)MethodInfo.GetCurrentMethod()).DeclaringType.GetMethod("", new Type[] {})

Как бы мне добиться получения перегрузки от CurrentMethod ?

EDIT: пояснил, что мы не можем использовать таблицы базы данных.

1 Ответ

1 голос
/ 03 августа 2010

я забыл про linq!В этом конкретном сценарии у меня есть только два метода, один из которых содержит 1 параметр, а другой содержит все остальные параметры, поэтому простой (см. Ниже) отлично работает:

method.DeclaringType.GetMethods()
    .Where(x => x.Name == "UserInsert" 
           && x.GetParameters().Count() > 1)
    .Single()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...