我通过使用名为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>
答案 0 :(得分:0)
CodeFluent实体具有默认值的概念。 Simon's answer解释了这一概念:https://stackoverflow.com/a/35790190/2996339
解决问题的常用方法是添加一个枚举值作为默认值(None / Unset / Unspecified / ...),或更改默认值。
另一种方法是在方法参数,方法或枚举级别将Use Persistence Default Value
设置为False
。