При создании метода RAW CFQL я заметил, что объявление параметров теряет свои значения NULL по умолчанию по сравнению с традиционным методом SEARCH.
Таким образом, сгенерированная процедура не будет принимать никаких нулевых аргументов. Обычно я хотел бы иметь:
CREATE PROCEDURE [dbo].[User_AdvancedSearch]
(
@townIds [nvarchar] (max) = NULL,
@townLabel [nvarchar] (256) = NULL
)
вместо
CREATE PROCEDURE [dbo].[User_AdvancedSearch]
(
@townIds [nvarchar] (max),
@townLabel [nvarchar] (256)
)
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(max), @paramlist nvarchar(max)
SELECT @sql=
'SELECT 1,2'
SELECT @paramlist = 'townIds nvarchar (256),
@townLabel nvarchar (256)'
EXEC sp_executesql @sql
RETURN
Пример, используемый здесь, выглядит следующим образом
<cf:method name="AdvancedSearch">
<cf:body text="RAW(string[] townIds, string townLabel) " rawText="DECLARE @sql nvarchar(max), @paramlist nvarchar(max)

SELECT @sql=
'SELECT 1,2'
SELECT @paramlist = 'townIds nvarchar (256), 
 @townLabel nvarchar (256)'
EXEC sp_executesql @sql

" language="tsql" />
</cf:method>
1. Как сделать так, чтобы мой параметр по умолчанию был равен NULL в методе RAW?
Также я заметил, что свойство, указывающее тип возвращаемого значения (имя возвращаемого типа), похоже, не принимается во внимание. Сгенерированный метод возвращает void вместо выбранного типа и находится в классе Entity, а не в классе EntityCollection.
По этой ссылке 1 я прочитал, что Для синтаксис: RAW(аргументы). Вы должны указать тип возвращаемого значения в сетке свойств
Сгенерированный метод не учитывает это свойство и возвращает void, как показано ниже.
public static void AdvancedSearch(string[] townIds, string townLabel)
{
if ((townLabel == default(string)))
{
throw new System.ArgumentNullException("townLabel");
}
CodeFluent.Runtime.CodeFluentPersistence persistence = CodeFluentContext.Get(WcfServices.Model.Constants.WcfServices_ModelStoreName).Persistence;
persistence.CreateStoredProcedureCommand(null, "User", "AdvancedSearch");
persistence.AddParameter("@townIds", townIds);
persistence.AddParameter("@townLabel", townLabel);
System.Data.IDataReader reader = null;
try
{
persistence.ExecuteNonQuery();
}
finally
{
if ((reader != null))
{
reader.Dispose();
}
persistence.CompleteCommand();
}
}
2 - Как сделать так, чтобы процедура RAW CFQL возвращала соответствующий тип?
Спасибо за Ваш ответ.