CQFL RAW 方法参数在生成的 SQL 中丢失了默认的 NULL 值
CQFL RAW method parameters losing their default NULL values in generated SQL
在创建 RAW CFQL 方法时,我注意到与传统的 SEARCH 方法相比,参数声明丢失了它们的默认 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?
我还注意到似乎没有考虑 属性 给出 return 类型(Return 类型名称)。该方法生成 returns void 而不是所选类型,并且位于 Entity class 而不是 EntityCollection class.
我在这篇 link 1 中读到 For syntax: RAW(arguments)。您必须在 属性 网格
中指定 return 类型
生成的方法没有考虑到 属性 和 return 的无效性,如下所示。
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 程序设为 return?
感谢您的回答。
您应该创建一个方法 SEARCH() RAW
:
<cf:method name="SearchRaw" body="SEARCH(string text1, string text2) RAW" rawBody="SELECT @text1" />
如果您仍想创建方法 RAW
,您需要将参数设置为可为空并指定 return 类型:
<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>
在创建 RAW CFQL 方法时,我注意到与传统的 SEARCH 方法相比,参数声明丢失了它们的默认 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?
我还注意到似乎没有考虑 属性 给出 return 类型(Return 类型名称)。该方法生成 returns void 而不是所选类型,并且位于 Entity class 而不是 EntityCollection class.
我在这篇 link 1 中读到 For syntax: RAW(arguments)。您必须在 属性 网格
中指定 return 类型生成的方法没有考虑到 属性 和 return 的无效性,如下所示。
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 程序设为 return?
感谢您的回答。
您应该创建一个方法 SEARCH() RAW
:
<cf:method name="SearchRaw" body="SEARCH(string text1, string text2) RAW" rawBody="SELECT @text1" />
如果您仍想创建方法 RAW
,您需要将参数设置为可为空并指定 return 类型:
<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>