Ich habe eine DB-Funktion, die einen Tabellenwertparameter als Argument (@c) benötigt.EF 6.x und Funktion mit Tabellenwert-Parameter
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
Die Funktion vom EF Designer (Datenbank zuerst), da dies in der DbContext gebaut:
[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);
}
Wenn ich diese Funktion nur die x verfügbar vorbei rufen/@ x Parameter bekomme ich diese Ausnahme :
Ich weiß nicht, wie Sie den Parameter @c an die Funktion übergeben. Jeder kann helfen?
Vielen Dank im Voraus.
P. S .: Ich MS SQL 2012 bin mit (oder neuer)
Es sollte wahrscheinlich eine DataTable sein? – Sam