NerdDinner Tutorial을 통해 작업하면서 LINQ-SQL에서 생성 된 부분 클래스에 종속되지 않는 속성에 대한 유효성 검사를 수행하는 좋은 방법을 찾으려고합니다. . 여기에 지금까지 한 일을 몇 가지 예제 코드는 다음과 같습니다LINQ to SQL : OnValidate() 및 사용자 지정 도메인 모델 클래스
이메일은 이메일 테이블을 기반으로 LINQ - 투 - SQL 생성 유형public abstract class DomainEntity
{
public IEnumerable<ValidationError> ValidationErrors { get; private set; }
public bool Validate()
{
bool isValid = false;
if (this.ValidationErrors != null)
this.ValidationErrors = null;
this.ValidationErrors = this.GetValidationErrors();
if (this.ValidationErrors.Count() == 0)
isValid = true;
return isValid;
}
protected abstract IEnumerable<ValidationError> GetValidationErrors();
}
public partial class Email : DomainEntity
{
protected override IEnumerable<ValidationError> GetValidationErrors()
{
if (!this.ValidateAddress())
yield return new ValidationError("Address", DomainResources.EmailAddressValidationErrorMessage);
yield break;
}
partial void OnValidate(ChangeAction action)
{
bool isValid = this.Validate();
if (!isValid)
throw new InvalidEmailException(this);
}
private bool ValidateAddress()
{
// TODO: Use a regex to validate the email address.
return !string.IsNullOrEmpty(this.Address);
}
}
. 이메일 테이블은 도메인 모델 클래스 (예 : '사용자')와 관련된 여러 엔터티 중 하나이기 때문에 '사용자'도메인 모델 클래스를 만들고 Validation Application Block 특성을 사용하여 속성의 유효성을 검사하는 것이 이상적입니다. 내 데이터베이스 스키마를 변경하고 변경 내 LINQ - 투 - SQL이 생성 된 클래스를 통해 떨어질 경우
가public class User
{
private Email emailEntity;
[EmailAddressValidator]
public string EmailAddress
{
get { return emailEntity.Address; }
set { emailEntity.Address = value; }
}
}
그래서, 나는이 부분적인 분리하지 않아도 : 다른 말로하면,이를 사용하고 싶습니다 수업 (부분 수업 이메일과 같은). 또한 NerdDinner 자습서 에서처럼 Regexes 콜렉션을 유지할 필요가 없도록 Validation Application Block 속성을 통합하는 것이 좋습니다. 또한 도메인 클래스 인 사용자는 뷰 모델 생성, 뷰 렌더링 등 이메일 및 기타 엔티티가 아닌 도메인의 기능 단위가 될 것입니다. 그러나
과 같은 작업을 수행하지 않고도 유효성 검사 호출을 캡처 할 수있는 방법은 없습니다.public abstract class DomainEntity
{
public event EventHandler Validation(object sender, EventArgs args);
protected void OnValidation()
{
if (this.Validate != null)
this.Validate(this, EventArgs.Empty);
}
}
public partial class Email
{
partial void OnValidate(ChangeAction action)
{
this.OnValidation();
}
}
그런 다음 해당 이벤트에 User hook을 넣고 User 내의 모든 유효성 검사를 처리하십시오. 유효성 검사 응용 프로그램 블록에서도 잘 작동합니까? 합리적인 방법으로 사용자와 같은 집계 된 도메인 클래스에서 유효성 검사를 수행하는 방법
참고 : 데이터베이스에 테이블과 같은 "사용자"권한이 있지만 다른 테이블에서 가져올 LINQ-to-SQL 독립 클래스 사용자에 관한 것입니다. 스키마를 변경하면 (비정규 화) 목표는 생성 된 엔티티의 기본 변경 사항을 반영하도록 User 클래스 만 업데이트하는 것입니다. – emptyset