0
引数としてテーブル値のパラメータを必要とするDB関数があります(@c)。EF 6.xとテーブル値のパラメータを持つ関数
CREATE TABLE Test
(
CD varchar(10) not null
)
GO
INSERT INTO Test VALUES ('TEST')
GO
CREATE TYPE [CdTable] AS TABLE (CD varchar(10));
GO
CREATE FUNCTION TestTbl (@x varchar(10), @c CdTable READONLY)
RETURNS TABLE
AS
RETURN
SELECT t.CD
FROM test t
JOIN @c c ON t.CD = c.CD OR c.CD IS NULL
WHERE t.CD = @x
GO
DECLARE @tt AS CdTable;
INSERT INTO @tt VALUES ('TEST');
SELECT * FROM TestTbl('TEST', @tt);
DELETE FROM @tt;
INSERT INTO @tt VALUES (NULL);
SELECT * FROM TestTbl('TEST', @tt);
GO
機能がDbContextにこのようEFデザイナー(データベースファースト)から構築されています:私はのみ利用可能X/@ Xパラメータを渡し、この関数を呼び出す
[DbFunction("MyDbContext", "TestTbl")]
public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x)
{
var xParameter = user.HasValue ?
new ObjectParameter("x", x) :
new ObjectParameter("x", typeof(System.String));
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestTbl_Result>("[MyDbContext].[TestTbl](@x)", xParameter);
}
場合、私はこの例外を取得:
ex {"An error occurred while executing the command definition. See the inner exception for details."} System.Exception {System.Data.Entity.Core.EntityCommandExecutionException}
ex.InnerException {"An insufficient number of arguments were supplied for the procedure or function TestTbl."} System.Exception {System.Data.SqlClient.SqlException}
@cパラメータを関数に渡す方法がわかりません。誰でも助けることができますか?
ありがとうございます。
p.s:私はあなたがテーブル値パラメータ(SqlDbType.Structured)を指定することができます別の方法のExecuteStoreQueryを使用する必要があります
おそらくDataTableでしょうか? – Sam