C# как использовать DataAnnotations StringLength и подстроку для удаления текста
у меня есть классы моделей, которые имеют свойство description с атрибутом аннотации данных StringLength, а length имеет значение 100 символов. Когда это свойство составляет более 100 символов и Entity Framework пытается сохранить это свойство, я получаю следующую ошибку.
[StringLength(100, ErrorMessage = "Description Max Length is 100")]
public string Description { get; set; }
ошибка:
"Ошибка проверки для одного или нескольких объектов. Дополнительные сведения см. В разделе свойство 'EntityValidationErrors'"
Я не уверен, если это помогает в формировании решение, но Сначала я использую Entity Framework CTP5 и код.
то, что я хочу сделать, это если описание более 100 символов, а затем удалить символы, которые более 100 символов, так что описание может быть сохранено и не будет возникать ошибка.
Я считаю, что я должен иметь возможность использовать атрибут DataAnnotation StringLength вручную, чтобы помочь мне определить допустимую длину описания, а затем использовать подстроку для удаления любых символов над допустимой суммой.
кто-нибудь знает, как использовать DataAnnotation в этой ситуации? Или есть другие варианты, которые доступны?
обновление Я сделал то, что предложил BrokenGlass и вот моя реализация, если:
public static class DataAnnotation
{
public static int? GetMaxLengthFromStringLengthAttribute(Type modelClass, string propertyName)
{
int? maxLength = null;
var attribute = modelClass.GetProperties()
.Where(p => p.Name == propertyName)
.Single()
.GetCustomAttributes(typeof(StringLengthAttribute), true)
.Single() as StringLengthAttribute;
if (attribute != null)
maxLength = attribute.MaximumLength;
return maxLength;
}
}
int? maxLength = DataAnnotation.GetMaxLengthFromStringLengthAttribute(typeof(Car), "Description");
if(maxLength != null && car.Description.Length > maxLength)
car.Description = car.Description.Substring(0, maxLength.Value);
BarDev
3 ответов
вы всегда можете проверить значение атрибута, используя отражение, хотя этот подход не лучший, если вы можете обойти его - это не очень:
var attribute = typeof(ModelClass).GetProperties()
.Where(p => p.Name == "Description")
.Single()
.GetCustomAttributes(typeof(StringLengthAttribute), true)
.Single() as StringLengthAttribute;
Console.WriteLine("Maximum Length: {0}", attribute.MaximumLength);
почему все хлопоты? Почему не
private string _description = string.Empty;
[StringLength(100, ErrorMessage = "Description Max Length is 100")]
public string Description
{
get { return _description; }
set { _description = value.Substring(0,100); }; // or something equivalent
}
создайте модель представления, у которой нет аннотации данных для длины, затем вы можете сопоставить ее с моделью сущности и усечь значение, если оно больше 100.