StringLength veri açıklaması özelliği olan bir açıklama özelliği olan ve uzunluk 100 karakter olarak ayarlanmış bir model sınıfları var. Bu özellik 100'den fazla karakter olduğunda ve Entity Framework bu özelliği kaydetmeye çalıştığında aşağıdaki hatayı alıyorum.C# Nasıl kullanılır DataAnnotations StringLength ve SubString metni kaldırmak için
[StringLength(100, ErrorMessage = "Description Max Length is 100")]
public string Description { get; set; }
Hata:
Bunun bir çözelti oluşturmada yardımcı olur emin değilim
"Doğrulama fazla ayrıntı için 'EntityValidationErrors' özelliğine bakın bir veya daha fazla varlıkla için başarısız oldu", ama ben Entity Framework CTP5 ve İlk Kod kullanma.
Ne yapmak isterim, açıklama 100 karakterden uzunsa, 100 karakterden uzun karakterleri kaldırın, böylece açıklama kaydedilebilir ve hiçbir hata oluşturulamaz.
Geçerli açıklamanın uzunluğunu tanımlamama yardımcı olmak için DataAnnotation özniteliğini StringLength özelliğini el ile kullanabilmem ve daha sonra geçerli miktarın üzerindeki herhangi bir karakteri kaldırmak için SubString kullanabileceğime inanıyorum.
DataAnnotation'ı bu durumda nasıl kullanacağını bilen var mı? Ya da başka bir seçenek var mı?
Güncelleme Ben BrokenGlass önerdi yaptım ve burada uygulanması halinde: bu yaklaşım olmasa Her zaman yansıma kullanarak özellik değerini kontrol edebilir
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
Bu soru için eklemem gereken başka etiketler var mı? –
DataAnnotation hakkında fazla bir şey bilmiyorum. Diğer seçeneklere gelince, yalnızca alıcıları/ayarlayıcıları uygulayabilir ve sette bir kontrol/kesme yapabilirdiniz. – Rob
Öneriniz için teşekkürler. Bunu bir iş olarak yaptım. Muhtemelen konuyu karmaşıklaştırıyorum. Ancak, Doğrulama'yı ve fazladan karakterleri kaldırmak istediğim diğer durumları görmek istediğim farklı durumları görebiliyorum. Benim WCF uygulamasında, ekstra karakteri kaldırmak ve bir hata yükseltmek istiyorum, ancak bir ASP.NET veya Win Forms gibi bir veri girişi uygulamasında kullanıcı için bir doğrulama mesajı tetiklemek istiyorum. –