private string BuildPropertyType(PropertyModel propertyModel)
{
DebugCheck.NotNull(propertyModel);
var originalStoreTypeName = propertyModel.StoreType;
var typeUsage = ProviderManifest.GetStoreType(propertyModel.TypeUsage);
if (string.IsNullOrWhiteSpace(originalStoreTypeName))
{
originalStoreTypeName = typeUsage.EdmType.Name;
}
else
{
var storeTypeUsage = BuildStoreTypeUsage(originalStoreTypeName, propertyModel);
typeUsage = storeTypeUsage ?? typeUsage;
}
var storeTypeName = originalStoreTypeName;
const string MaxSuffix = "(max)";
if (storeTypeName.EndsWith(MaxSuffix, StringComparison.Ordinal))
{
storeTypeName = Quote(storeTypeName.Substring(0, storeTypeName.Length - MaxSuffix.Length)) + MaxSuffix;
}
else
{
storeTypeName = Quote(storeTypeName);
}
switch (originalStoreTypeName)
{
case "decimal":
case "numeric":
storeTypeName += "(" + (propertyModel.Precision ?? typeUsage.GetPrecision())
+ ", " + (propertyModel.Scale ?? typeUsage.GetScale()) + ")";
break;
case "datetime2":
case "datetimeoffset":
case "time":
storeTypeName += "(" + (propertyModel.Precision ?? typeUsage.GetPrecision()) + ")";
break;
case "binary":
case "varbinary":
case "nvarchar":
case "varchar":
case "char":
case "nchar":
storeTypeName += "(" + (propertyModel.MaxLength ?? typeUsage.GetMaxLength()) + ")";
break;
}
return storeTypeName;
}