当参数是枚举时,CFQL不起作用

时间:2016-11-21 09:34:15

标签: codefluent

我通过使用名为Employee的实体和名为EmployeeStatus的枚举创建一个小样本来重现该问题。然后我创建了一个名为LoadByStatus的方法。 问题是当enum参数设置为employeed时,该方法的第一行抛出异常。由于我注释掉了if语句并且它生成了SQL异常,因此还有其他错误。

resotreData()

以下是员工实体

public static System.Data.IDataReader PageDataLoadByStatus(CodeFluent.Runtime.PageOptions pageOptions, DemoLoadByEnum.EmployeeStatus status)
{
    if ((status == DemoLoadByEnum.EmployeeStatus.Employeed))
    {
        throw new System.ArgumentNullException("status");
    }
    CodeFluent.Runtime.CodeFluentPersistence persistence = CodeFluentContext.Get(DemoLoadByEnum.Constants.DemoLoadByEnumStoreName).Persistence;
    persistence.CreateStoredProcedureCommand(null, "Employee", "LoadByStatus");
    persistence.AddParameterEnumInt32("@status", status, DemoLoadByEnum.EmployeeStatus.Employeed);
    if ((pageOptions != null))
    {
        System.Collections.IEnumerator enumerator = pageOptions.OrderByArguments.GetEnumerator();
        bool b;
        int index = 0;
        for (b = enumerator.MoveNext(); b; b = enumerator.MoveNext())
        {
            CodeFluent.Runtime.OrderByArgument argument = ((CodeFluent.Runtime.OrderByArgument)(enumerator.Current));
            persistence.AddParameter(string.Format("@_orderBy{0}", index), argument.Name);
            persistence.AddParameter(string.Format("@_orderByDirection{0}", index), ((int)(argument.Direction)));
            index = (index + 1);
        }
    }
    System.Data.IDataReader reader = CodeFluentContext.Get(DemoLoadByEnum.Constants.DemoLoadByEnumStoreName).Persistence.ExecuteReader();
    return reader;
}

以下是我的枚举

  <cf:entity name="Employee" namespace="DemoLoadByEnum">
    <cf:property name="Id" key="true" />
    <cf:property name="Name" entityDisplay="true" />
    <cf:property name="Status" typeName="{0}.EmployeeStatus" />
    <cf:method name="LoadByStatus" body="LOAD(DemoLoadByEnum.EmployeeStatus status) WHERE Status = @status" />
  </cf:entity>

1 个答案:

答案 0 :(得分:0)

CodeFluent实体具有默认值的概念。 Simon's answer解释了这一概念:https://stackoverflow.com/a/35790190/2996339

解决问题的常用方法是添加一个枚举值作为默认值(None / Unset / Unspecified / ...),或更改默认值。

另一种方法是在方法参数,方法或枚举级别将Use Persistence Default Value设置为False