データアノテーション属性がStringLengthで、長さが100文字に設定されたdescriptionプロパティを持つモデルクラスがあります。このプロパティが100文字を超え、Entity Frameworkがこのプロパティを保存しようとすると、次のエラーが発生します。C#DataAnnotations StringLengthとSubStringを使用してテキストを削除する方法
[StringLength(100, ErrorMessage = "Description Max Length is 100")]
public string Description { get; set; }
エラー:
「検証は、1つのまたは複数のエンティティのために失敗した詳細については、 『EntityValidationErrors』プロパティを参照してください」
を私はこれが解決策を形成するのに役立ちますかどうかわからないんだけど、I 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
この質問に追加する必要があるタグはありますか? –
DataAnnotationについてよく知りません。他のオプションについては、getter/setterを実装し、setterでチェック/切り捨てを行うだけです。 – Rob
提案していただきありがとうございます。私はちょうどそれを回避するためにしました。私はおそらくこの問題を複雑にしています。しかし、私は、Validationや余分な文字を削除したい場合など、さまざまな状況を見ることができます。私のWCFアプリケーションでは、余分な文字を削除してエラーを発生させたくないですが、ASP.NETやWin Formsのようなデータ入力アプリケーションでは、ユーザーに検証メッセージを出したいと思います。 –