2013-01-11 18 views
5

Giả sử có một class A có một tham chiếu đến class B như thế nàyđối tượng Làm thế nào để sử dụng Validate lồng tự động

class A 
{ 
    [NotNull] 
    string Alpha; 
    B bObject; 
} 

class B 
{ 
    [NotNull] 
    string Beta; 
} 

A a = new A(); 
a.Alpha = "test" 
a.bObject = new b(); 
a.bObject.Beta = null; 

Bây giờ khi gọi một cái gì đó giống như Tạo cho một thể hiện của A, mã gọi NHibernate.Validator.Engine.ValidatorEngine.Validate

Tuy nhiên, nó chỉ xác nhận các thành viên của A (Alpha). Khi NHibernate cố gắng duy trì đối tượng, nó không thành công vì cơ sở dữ liệu không cho phép null cho Object.

Có thể định cấu hình để xác thực A cũng xác thực các thuộc tính của B không?

* EDIT:

Con đường tôi đang nhận được khoảng này hiện đang tự gọi Validate(A.bObject) bất cứ nơi nào mà kho cần phải tạo/cập nhật A, ví dụ:

Trong kho cho A

public void Update(A entity) 
{ 
    //I want to avoid having to do this in every class repository that has a 
    //reference to B 
    var errorsList = valEngine.Validate(entity.bObject); 

    if (errorsList .Length == 0) 
    { 
     status = base.Create(entity); 
     //Simply calls the appropriate NH function to persist the object 
    } 
} 

Làm cách nào để tránh lặp lại dòng xác thực B mỗi lần?

Trả lời

0

Từ documentation, bạn có thể sử dụng thuộc tính hợp lệ để:

thực hiện xác nhận đệ quy trên các đối tượng liên quan. Nếu đối tượng là một Bộ sưu tập hoặc một mảng, các phần tử được xác thực đệ quy. Nếu đối tượng là Bản đồ, các phần tử giá trị được xác thực đệ quy.

Bạn đã thử chưa?

class A 
{ 
    [NotNull] 
    string Alpha; 

    [Valid] 
    B bObject; 
} 
Các vấn đề liên quan