Сопоставить значение NULL из базы данных со свойством объекта - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть таблица на сервере SQL с некоторым столбцом (tinyint) со значением Null, например:

enter image description here

Соответствующий объект DataObject в C # сОбнуляемые значения (карта BurstHierarchyTypeId на карте tbh_id и карта BurstPlateformTypeId на таблице tbp_id):

public class BurstShortCutDo : BaseDomain
{

private long _adfId = ValueTypeUtils.Instance.LongNull;
private string _websitesIds;
private string _shortCutValue = "";
private int? _burstHierarchyTypeId = null;
private int? _burstPlateformTypeId = null;


#region CONSTRUCTORS

public BurstShortCutDo()
{
}
#endregion

#region PROPERTIES
public long AdfId
{
    get { return _adfId; }

    set { _adfId = value; }
}

public int? BurstHierarchyTypeId
{
    get { return _burstHierarchyTypeId; }
    set { _burstHierarchyTypeId = value; }
}

public int? BurstPlateformTypeId
{
    get { return _burstPlateformTypeId; }
    set { _burstPlateformTypeId = value; }
}

public string ShortCutValue
{
    get { return _shortCutValue; }
    set { _shortCutValue = value; }
}
}

У меня есть запрос, который получает линии моей таблицы в соответствии с ComId.

Когда я выполняю запросЯ получаю сообщение об ошибке:

Invalid cast from 'System.Byte' to 'System.Nullable`1

вот установщик (из PropertyUtils.cs):

private void SetPropertySimpleName(object obj, string propName, object propValue)
{
PropertyInfo propInfo = obj.GetType().GetProperty(propName);
if (propInfo != null && propInfo.CanWrite)
{
    if (propValue == null && !propInfo.PropertyType.IsValueType)
    {
        propInfo.SetValue(obj, null, null);
    }
    else if (propInfo.PropertyType.IsAssignableFrom(propValue.GetType()))
    {
        propInfo.SetValue(obj, propValue, null);
    }
    else if (propValue is IConvertible)
    {
        // CRASH HERE 
        propInfo.SetValue(obj, Convert.ChangeType(propValue, propInfo.PropertyType, CultureInfo.CurrentCulture), null);
    }
}
else 
{
    throw new ObjectNotFoundException("The property '" + propName + "' is not found in class '" + obj.GetType().FullName + "'");
}
}

Сообщение об ошибке при попытке установить значение BurstPlateformTypeId (tbp_id = 1):

  Invalid cast from 'System.Byte' to 'System.Nullable`1

Convert.ChangeTpe взят из метаданных C #. Я понял, что значение, полученное запросом, равно «1», поэтому он обнаруживает целое число, но когда проверяет тип свойства изобъект получает значение NULL.

Почему мое значение свойства (1) считается байтом, а не целым числом?Как я могу отобразить NUll в соответствующее свойство (BurstPlateformTypeId) Null?

1 Ответ

0 голосов
/ 13 декабря 2018

После дальнейшего расследования:

TinyInt в SQL считается байтом в C #, поэтому мой объект данных был ложным.

Решение в моем объекте данных:

private byte? _burstHierarchyTypeId = null;
private byte? _burstPlateformTypeId = null;

public byte? BurstHierarchyTypeId
{
   get { return _burstHierarchyTypeId; }
   set { _burstHierarchyTypeId = value; }
}

public byte? BurstPlateformTypeId
{
   get { return _burstPlateformTypeId; }
   set { _burstPlateformTypeId = value; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...