0
由於我工作的地方迫使我使用存儲過程,而且我還沒有足夠長的時間來阻止它,所以我已經爲我們的所有存儲過程定製了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?
編輯:澄清,我們不允許使用數據庫表。
似乎是一個bizare方法來調用使用LinqToSQL存儲過程,你這樣做知道你可以將它們映射到你的DataContext類的方法嗎? – 2010-08-02 15:11:34
@本,謝謝!我已更新有關您的評論的問題。 – mhenrixon 2010-08-02 15:16:03
[如何使用反射調用.NET中的重載方法]的可能重複(http://stackoverflow.com/questions/223495/how-to-use-reflection-to-invoke-an-overloaded-method-in -淨) – mhenrixon 2010-08-02 16:10:12