2011-01-29 9 views
1

私は、値オブジェクトクラスFullNameをEmployeeエンティティクラスのプロパティとして使用しているとします。 FullNameには、初期イニシャル、ニックネームなどがあります。ドメインの観点からは、FullNameのFirstNameプロパティとLastNameプロパティの両方が評価されるようにしたいと考えています。nhibernateバリデータの使用

私はこれを属性ではなく、EmployeeValidator:ValidationDef {Employee}オブジェクトの一部として表現したいと考えています。

まず、FullName(つまりFirstAndLAstNameRequired)のクラスバリデータを作成してから、EmployeeのFullNameプロパティがValidAttributeのいくつかの控えめな形式を使用してValidであると言う必要がありますか?

まだ、this documentationがそこに一番出ているようですが、3歳になっています。私が見逃した新しいものがありますか? http://fabiomaulo.blogspot.com/search/label/Validator

ここにある:私はまだこれを考え出したていないが、私はおそらくここNHib検証情報の最良のソースが何であるかを発見した

乾杯、
Berryl

UPDATE

/// <summary>A person's name.</summary> 
public class FullName 
{ 

    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual string MiddleName { get; set; } 
    public virtual string NickName { get; set; } 
} 

public class EmployeeValidator : ValidationDef<Employee> 
{ 
    public EmployeeValidator() 
    { 
     Define(x => x.FullName).FirstAndLastNameRequired(); // how to get here!! 
    } 
} 

UPDATE FOR DAVフルネームを取得するにはID

public class FullNameValidator : ValidationDef<FullName> 
{ 
    public FullNameValidator() { 

     Define(n => n.FirstName).NotNullable().And.NotEmpty().And.MaxLength(25); 
     Define(n => n.LastName).NotNullable().And.NotEmpty().And.MaxLength(35); 

     // not really necessary but cool that you can do this 
     ValidateInstance 
      .By(
       (name, context) => !name.FirstName.IsNullOrEmptyAfterTrim() && !name.LastName.IsNullOrEmptyAfterTrim()) 
      .WithMessage("Both a First and Last Name are required"); 
    } 
} 

public class EmployeeValidator : ValidationDef<Employee> 
{ 
    public EmployeeValidator() 
    { 
     Define(x => x.FullName).IsValid(); // *** doesn't compile !!! 
    } 
} 

答えて

1

あなたは従業員を検証するとき、私は次のような何かをしたいと思う検証:

public class EmployeeValidator : ValidationDef<Employee> 
{ 
    public EmployeeValidator() 
    { 
     Define(x => x.FullName).IsValid(); 
     Define(x => x.FullName).NotNullable(); // Not sure if you need this 
    } 
} 

その後フルネームValidatorは同じようなものになるだろう

public class FullNameValidator : ValidationDef<FullName> 
{ 
    public EmployeeValidator() 
    { 
     Define(x => x.FirstName).NotNullable(); 
     Define(x => x.LastName).NotNullable(); 
    } 
} 

また、あなたは何かのようにすることができます(構文をチェックしていない):

public class EmployeeValidator: ValidationDef<Employee> 
{ 
public EmployeeValidator() { 

    ValidateInstance.By((employee, context) => { 
     bool isValid = true; 
     if (string.IsNullOrEmpty(employee.FullName.FirstName)) { 
      isValid = false; 
      context.AddInvalid<Employee, string>(
       "Please enter a first name.", c => c.FullName.FirstName); 
     } // Similar for last name 
     return isValid; 
    }); 
} 
} 
+0

基本的には、最初の行がコンパイルされないことを除いて(私は必要なもののように思えますが)、私はあなたに同意します。投稿時に最新の更新をご覧ください。 – Berryl

+0

Odd。多分私は忘れてしまった内部配線があったと思ったが、この方法はNHibernate.Validator.Cfg.Loquacious名前空間から来ている。私はNHibernate.Validator、バージョン= 1.2.0.3001を使用しています - あなたは同じバージョンを持っていますか? – David

+0

https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Validator/src/NHibernate.Validator/Cfg/Loquacious/IRelationshipConstraints.cs – David

関連する問題