创建RAW CFQL方法时,我注意到与传统的SEARCH方法相比,参数声明正在丢失其默认的NULL值。
因此,生成的过程不接受任何null参数。 通常我希望:
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 - 如何在RAW方法中将我的参数默认为NULL?
我还注意到,提供返回类型(返回类型名称)的属性似乎没有被考虑在内。生成的方法返回 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程序?
感谢您的回答。
答案 0 :(得分:1)
您应该创建方法SEARCH() RAW
:
<cf:method name="SearchRaw" body="SEARCH(string text1, string text2) RAW" rawBody="SELECT @text1" />
如果您仍想创建方法RAW
,则需要将参数设置为可为空并指定返回类型:
<cf:method name="SearchRaw" body="RAW(string text1, string text2)" rawBody="SELECT 1" returnTypeName="{0}.CustomerCollection">
<cf:parameter name="text1" nullable="true" />
<cf:parameter name="text" nullable="true" />
</cf:method>