最近發現用LinqToSQL的物件模型,使用ExecuteQuery<Binary>的方式執行SQL會回傳
型別’System.Data.Linq.Binary’ 必須宣告預設(無參數)建構涵式,才能在對應時加以建構,
的問題
實際案例如下:
先在DB裡建立一個Function ```sql
create function [dbo].[fb_CreatePWD]
(
@Param1 varchar(150)
)
RETURNS varbinary (150)
AS
BEGIN
DECLARE @ResultVar varbinary(150)
select @ResultVar = pwdencrypt(@Param1)RETURN @ResultVar
END
1 | ```sql |
得到以下錯誤訊息
型別 ‘System.Data.Linq.Binary’ 必須宣告預設 (無參數) 建構函式,才能在對應時加以建構
- 網路上找到有人說用byte[]接可以,所以立馬做一下測試 ```csharp
1 | <pre class="brush:csharp">var result = this.ExecuteQuery<binary>("select dbo.fn_CreatePWD({0})","ok").FirstOrDefault(); |
結果一樣GG, 型別 ‘System.Byte[]’ 必須宣告預設 (無參數) 建構函式,才能在對應時加以建構。
接著改用Entity Framework 6.0來試試看* 一樣不行
*
這邊特別備註一下,如果今天是直接用物件模型將function拉進來,並且直接對xxxDataContext.fn_CreatePWD()操作是可以運作沒問題.
但因為我今天的狀況是在Repository Pattern的情況下,並不會真的對實體做操作,而是全部都對基底類別DataContext做執行,所以沒有這個Method可以使用
我想以上狀況應該是LinqToSql的Bug吧!!網路上也查了滿久的資料,好像沒有人對這塊有比較好的處理方式,如果有再補充上來~