某天由資料庫主機更新某幾個Stored Procedure的dmbl定義後,
某一隻程式在儲存時會呼叫到更新後的Stored Procedure. 結果一直出現下列的錯誤
找不到資料行 "dbo" 或者使用者自訂函數或彙總 "dbo.zspXXXXX",或是名稱模糊不清。
但檢查了資料庫的SP定義和dbml中的定義完全是一樣的啊,怎麼會找不到咧??
於是打開dbml檔的XXXXX.designer.cs 查看, 發現呼叫的SP和其他SP比較後,多了一個屬性的定義 IsComposable="true"如下:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.zspXXXX" , IsComposable="true")]
public int zspXXXX([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> orgn, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> ym , [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="SmallInt")] System.Nullable<short> isAuto)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), orgn, ym, isAuto);
return ((int)(result.ReturnValue));
}
根據MSDN上的定義,
IsComposable 屬性 是取得或設定方法是對應至函式,還是對應至預存程序。如果是函式,則為 true,如果是預存程序,則為 false。
看來預設是false.
將這個屬性移除後, 重新compile, 呼叫SP就正常了.
沒有留言:
張貼留言