public DataTypeRegistration GetDataType(PropertyInfo instance, bool updateDataTypeDefinition = true)
{
_locks.TakeOrWait(instance);
DataTypeRegistration dataTypeRegistration;
if (_register.TryGetRegistration(instance, out dataTypeRegistration))
{
_locks.Release(instance);
return(dataTypeRegistration);
}
_locks.TakeOrWait(instance.PropertyType);
bool typeExisted = false;
dataTypeRegistration = instance.PropertyType.IsEnum ?
BuildEnumRegistration(instance.PropertyType)
:
BuildDataTypeRegistration(instance, out typeExisted);
var at = instance.GetCustomAttribute <NodePickerConfigAttribute>(false);
IDictionary <string, PreValue> codeFirstPreValues = typeExisted ? null : GetPreValuesFromProperty(instance);
UpdateOrCreateDataTypeDefinition(codeFirstPreValues, (!typeExisted) && updateDataTypeDefinition, dataTypeRegistration);
_locks.Release(instance.PropertyType);
_locks.Release(instance);
return(dataTypeRegistration);
}