I just met a problem like what you described and found a way to create a limited length's string. Maybe a little inflexible but concise when there are only finite varchar length definitions in database.
Firstly introduce some basic classes:
public class Length16
{
    public static int StringLength { get => 16; }
}
public class Length8
{
    public static int StringLength { get => 8; }
}
public class Length15
{
    public static int StringLength { get => 15; }
}
public class LimitedLengthString<T>
{
    private string _sValue;
    public LimitedLengthString(string sNewValue)
    {
        _sValue = sNewValue;
    }
    public static implicit operator LimitedLengthString<T>(string sNewValue)
    {
        var prop = typeof(T).GetProperty("StringLength");
        int iLength = (int)prop.GetValue(null);
        if (sNewValue.Length > iLength)
        {
            throw new Exception($"New string is too long! Allowed length {iLength}.");
        }
        return new LimitedLengthString<T>(sNewValue);
    }
    public static implicit operator string(LimitedLengthString<T> sSource)
    {
        return sSource.ToString();
    }
    public override string ToString()
    {
        return _sValue; 
    }
}
public class AutoTruncatedString<T>
{
    private string _sValue;
    public AutoTruncatedString(string sNewValue)
    {
        _sValue = sNewValue;
    }
    public static implicit operator AutoTruncatedString<T>(string sNewValue)
    {
        var prop = typeof(T).GetProperty("StringLength");
        int iLength = (int)prop.GetValue(null);
        return new AutoTruncatedString<T>(sNewValue.Substring(0, iLength));
    }
    public static implicit operator string(AutoTruncatedString<T> sSource)
    {
        return sSource.ToString();
    }
    public override string ToString()
    {
        return _sValue;
    }
}
Use them like this:
LimitedLengthString<Length8> sLimitedLength8;
sLimitedLength8 = "asdfgasdfg"; // will error out
AutoTruncatedString<Length8> sAutoTruncated8;
sAutoTruncated8 = "asdfgasdfg"; // will be truncated
sLimitedLength8 will throw an error if you try to assign a string longer than 8 and sAutoTruncated8 will truncate the string you assign to it.
For you, you can define the VendorName this way:
public LimitedLengthString<Length15> VendorName { get; set; }
Hope this could help you.