サーバー側のDbContext
検証エラーをクライアントに戻す方法がわかりません。Breeze には、 などのいくつかの属性に反応するデフォルトのバリデーターがあることは理解していますRequired
が、他のすべての属性についてはどうでしょうか? クライアント側でチェックする Breeze 用のカスタム JavaScript バリデータを作成することもできますが、エンティティがサーバー側で有効であることも確認する必要があります。
たとえば、アプリケーションPerson
には有効な電子メール アドレスが必要です。EmailAddress
悪意のあるユーザーがやって来て、クライアントを通過して電子メール アドレスを取得し、バリデータを通過しないデータをサーバーに投稿します。これまでのところ、Breeze での私の経験では、電子メール アドレスが保存され、DbContext
Entity Framework エラーが発生することはありません。
以下のモデルを想定すると、エンティティ検証エラーを取得する最良の方法は何ですか?
public class PeopleContext : DbContext
{
public PeopleContext()
: base("name=ConnectionString"){ }
public DbSet<Person> People { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[EmailAddress]
[Required]
public string Email { get; set; }
}
更新 1:
私が経験している問題を再現するための手順を次に示します。
- 指示に従って「Todo」サンプルを作成します ( http://www.breezejs.com/documentation/start-nuget )
BreezeSampleTodoItem.cs
新しいカスタム バリデータをファイルに追加します。[AttributeUsage(AttributeTargets.Property)] public class CustomValidator : ValidationAttribute { public override Boolean IsValid(Object value) { string val = (string)value; if (!string.IsNullOrEmpty(val) && val == "Error") { ErrorMessage = "{0} equal the word 'Error'"; return false; } return true; } }
Description
フィールドを新しいカスタム バリデータで装飾します。[CustomValidator] public string Description { get; set; }
using
もちろん、適切な s (System
および) を追加しますSystem.ComponentModel.DataAnnotations
。- プロジェクトを実行します。
- 説明フィールドの 1 つに「エラー」と入力して保存します。
DbEntityValidationException
これは、Breeze を介してエラーが発生したり、Entity Framework からスローされることさえあると予想される場所です。2台の別々のコンピューターで試しましたが、同じ結果が得られました。エンティティは、エラーがなかったかのようにデータベースに保存されます。実際、IsValid
カスタム バリデータのメソッド内の任意の場所にブレークポイントを配置すると、呼び出されていないことがわかります。