2

エンティティSQLで次のクエリを使用しています

 Select n.Name as NodeNameN  from Nodes  as n where n.Name IN MultiSet (@Test)

値は、以下のコードを使用して実行時に置き換えられます。

var reader = model.CreateQuery<System.Data.Common.DbDataRecord>(
                Statement,
                Parameters.ToArray());

これが実行されると、SQL Server で生成される対応するステートメントは次のようになります。

exec sp_executesql N'SELECT 
1 AS [C1], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Nodes] AS [Extent1]
WHERE [Extent1].[Name] = @Test',N'@Test nvarchar(4000)',@Test=N'''BMA'',''Area A'','

IN節の代わりに=節が代入されます。

ここで何か間違ったことをしていますか?

4

1 に答える 1

1

マルチセットを複数の SQL パラメータでパラメータ化する必要があります。現在のクエリは1 つの要素を持つマルチセットとして解釈されるため、Entity Framework によって行われる SQL マッピングは正しいです (1 つの要素を持つ IN 句は、WHERE 句をテストするのと同じです)。その要素と等しい)-より多くのパラメーターを渡すだけです:

Select n.Name as NodeNameN  from Nodes  as n where n.Name IN MultiSet (@Test1, @Test2)
于 2012-01-04T14:08:29.770 に答える