Метод LoadBy возвращает значение null, если предоставленный параметр равен 0.

Моя модель содержит сущность с числовым свойством:

 <cf:entity name="Land">
     <cf:property name="Id" key="true" />
     <cf:property name="Landcode" typeName="ushort" nullable="false" usePersistenceDefaultValue="false" />

      <cf:method name="LoadByLandcode"
          body="LOADONE(ushort landCode) WHERE Landcode = @landcode">
      </cf:method>
 </cf:entity>

Сгенерированный код для метода LoadByLandcode выглядит следующим образом:

   public static Land LoadByLandcode(ushort landCode)
    {
        if ((landCode == CodeFluentPersistence.DefaultUInt16Value))
        {
            return null;
        }
        Land land = new Land();
        CodeFluent.Runtime.CodeFluentPersistence persistence = CodeFluentContext.Get(BusinessLayerStoreName).Persistence;
        persistence.CreateStoredProcedureCommand(null, "Land", "LoadByLandcode");
        persistence.AddParameter("@landCode", landCode);
        System.Data.IDataReader reader = null;
        try
        {
            reader = persistence.ExecuteReader();
            if ((reader.Read() == true))
            {
                land.ReadRecord(reader, CodeFluent.Runtime.CodeFluentReloadOptions.Default);
                land.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Unchanged;
                return land;
            }
        }
        finally
        {
            if ((reader != null))
            {
                reader.Dispose();
            }
            persistence.CompleteCommand();
        }
        return null;
    }

Почему CodeFluent возвращает значение null, если предоставленный параметр landCode равен 0? Я не хочу, чтобы это произошло, потому что landCode 0 также является допустимым значением в базе данных. Как я могу изменить это поведение?


person BremHi    schedule 21.06.2016    source источник


Ответы (1)


Параметр метода использует значение сохраняемости по умолчанию (по умолчанию 0). Поэтому, чтобы избежать проверки значения по умолчанию, вы должны указать, что параметр может принимать значение NULL:

<cf:method name="LoadByLandcode"
    body="LOADONE(Landcode?) WHERE Landcode = @Landcode">
</cf:method>


public static Land LoadByLandcode(ushort landcode)
{
    Land land = new Land();
    CodeFluent.Runtime.CodeFluentPersistence persistence = CodeFluentContext.Get(Constants.StoreName).Persistence;
    persistence.CreateStoredProcedureCommand(null, "Land", "LoadByLandcode");
    persistence.AddRawParameter("@Landcode", landcode);
    System.Data.IDataReader reader = null;
    try
    {
        reader = persistence.ExecuteReader();
        if ((reader.Read() == true))
        {
            land.ReadRecord(reader, CodeFluent.Runtime.CodeFluentReloadOptions.Default);
            land.EntityState = CodeFluent.Runtime.CodeFluentEntityState.Unchanged;
            return land;
        }
    }
    finally
    {
        if ((reader != null))
        {
            reader.Dispose();
        }
        persistence.CompleteCommand();
    }
    return null;
}
person meziantou    schedule 21.06.2016