CQFL RAW方法参数在生成的SQL中丢失其默认NULL值

时间:2016-09-16 12:09:53

标签: codefluent

创建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)&#xD;&#xA;&#xD;&#xA;SELECT @sql=&#xD;&#xA;'SELECT 1,2'&#xD;&#xA;SELECT @paramlist = 'townIds nvarchar (256), &#xD;&#xA;    @townLabel nvarchar (256)'&#xD;&#xA;EXEC sp_executesql @sql&#xD;&#xA;&#xD;&#xA;" 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程序?

感谢您的回答。

1 个答案:

答案 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>