Mam procedurę przechowywaną w mojej bazie danych, która pobiera parametr wartości tabeli, listę obiektów IdTable, które zawierają pojedynczą kolumnę Id.ExecuteStoreQuery z parametrami TVP
Mam modelu encji dla bazy danych i chcesz zrobić następujących ...
ProjectEntities projectEntities = new ProjectEntities();
DataTable stationIds = new DataTable();
stationIds.Columns.Add("Id");
stationIds.Rows.Add(1);
stationIds.Rows.Add(2);
SqlParameter parameter = new SqlParameter("@stationIds",stationIds);
parameter.TypeName = "IdTable";
var parameters = new object[] {parameter};
var results = projectEntities .ExecuteStoreQuery<ProjectSummary>("exec ProjectSummary", parameters);
var count = results.Count();
To działa i nie zwraca żadnych wyników, kiedy powinien on powrócić grono podmiotów ProjectSummary.
Kiedy profil tego w SQL Profiler, pojawia się następujący
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')
exec sp_executesql N'exec ProjectSummary',N'@stationIds [IdTable] READONLY',@[email protected]
Gdybym zadeklarować procedurę przechowywaną, aby być
ALTER PROCEDURE [dbo].[ProjectSummary]
@stationIds [dbo].[IdTable] READONLY
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT * FROM @stationIds
...
Wtedy nie uzyskać wyniki z powrotem, to wygląda TVP parametr przechodzi przez puste.
Gdzie jakbym ręcznie wykonać
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')
EXEC [ProjectSummary]
@stationIds = @p3
GO
uzyskać wartości 1 i 2 powrócił z zapytania SELECT.
Wygląda na to, że chcę używać EXEC zamiast SP_EXECUTESQL, gdy uruchamiam ExecuteStoreCommand. Biorąc pod uwagę powyższy przykład kodu, jak mam to zrobić?
W jaki sposób dodałeś swój zdefiniowany przez użytkownika typ tabeli IdType do EF? Myślałem, że robienie tego nie jest możliwe. – Anand